頭段時間有機會了解到了webservice介面,引發思考。在呼叫webservice來呼叫windows,豈不是就寫了乙個簡單的桌面應用。
因此,用tkinter來控制彈窗,用webservice實現業務功能,最後用pyinstaller打包成可執行的exe檔案,應當可以直接執行。
嘗試成功,如下:
# coding=utf-8
from tkinter import
*import hashlib
import time
from suds.client import client
from suds.xsd.doctor import importdoctor, import
log_line_num =
0class
my_gui()
:def
__init__
(self, init_window_name)
: self.init_window_name = init_window_name
# 設定視窗
defset_init_window
(self)
: self.init_window_name.title(
"查詢城市天氣_v0.1"
)# 視窗名
# self.init_window_name.geometry('320x160+10+10') #290 160為視窗大小,+10 +10 定義視窗彈出時的預設展示位置
self.init_window_name.geometry(
'1280x760+100+100'
) self.init_window_name[
"bg"]=
"pink"
#視窗背景色
# self.init_window_name.attributes("-alpha",0.9) #虛化,值越小虛化程度越高
# 標籤
self.init_data_label = label(self.init_window_name, text=
"城市名稱"
) self.init_data_label.grid(row=
0, column=0)
self.result_data_label = label(self.init_window_name, text=
"天氣結果"
) self.result_data_label.grid(row=
0, column=12)
self.log_label = label(self.init_window_name, text=
"日誌"
) self.log_label.grid(row=
12, column=0)
# 文字框
self.init_data_text = text(self.init_window_name, width=
67, height=35)
# 原始資料錄入框
self.init_data_text.grid(row=
1, column=
0, rowspan=
10, columnspan=10)
self.result_data_text = text(self.init_window_name, width=
70, height=49)
# 處理結果展示
self.result_data_text.grid(row=
1, column=
12, rowspan=
15, columnspan=10)
self.log_data_text = text(self.init_window_name, width=
66, height=9)
# 日誌框
self.log_data_text.grid(row=
13, column=
0, columnspan=10)
# 按鈕
self.str_trans_to_md5_button = button(self.init_window_name, text=
"查詢天氣"
, bg=
"lightblue"
, width=10,
command=self.get_city_weather)
# 呼叫內部方法 加()為直接呼叫
self.str_trans_to_md5_button.grid(row=
1, column=11)
# 功能函式
defget_city_weather
(self)
: city_name =
str(self.init_data_text.get(
1.0, end)
).replace(
'\n',''
)if city_name:
try:
url =
''imp = import(
'', location=
'.xsd'
) imp.
filter
.add(
'') c = client(url, doctor=importdoctor(imp)
) message =
str(c.service.getweatherbycityname(city_name)
) message = message.split(
"string =")[
-1] self.result_data_text.delete(
1.0, end)
self.result_data_text.insert(
1.0, message)
self.write_log_to_text(
"info: 查詢成功"
)except
: self.result_data_text.delete(
1.0, end)
self.result_data_text.insert(
1.0,
"info: 查詢失敗"
)else
: self.write_log_to_text(
"error:位址無效"
)# 獲取當前時間
defget_current_time
(self)
: current_time = time.strftime(
'%y-%m-%d %h:%m:%s'
, time.localtime(time.time())
)return current_time
# 日誌動態列印
defwrite_log_to_text
(self, logmsg)
:global log_line_num
current_time = self.get_current_time(
) logmsg_in =
str(current_time)
+" "
+str
(logmsg)
+"\n"
# 換行
if log_line_num <=7:
self.log_data_text.insert(end, logmsg_in)
log_line_num = log_line_num +
1else
: self.log_data_text.delete(
1.0,
2.0)
self.log_data_text.insert(end, logmsg_in)
defgui_start()
: init_window = tk(
)# 例項化出乙個父視窗
zmj_portal = my_gui(init_window)
# 設定根視窗預設屬性
zmj_portal.set_init_window(
) init_window.mainloop(
)# 父視窗進入事件迴圈,可以理解為保持視窗執行,否則介面不展示
if __name__ ==
"__main__"
: gui_start(
)
當然,桌面應用沒那麼簡單,按這簡單實現,會有很多缺陷異常情況未做處理,例如超時無反應,請求失敗的情況。
tkinter基礎 輸入框 文字框
了解輸入框 文字框的使用方法 利用1製作簡易介面 首先明確上面由幾個元素組成 該介面由介面標題,輸入框 兩個按鈕 文字框組成。該介面我們需要實現的功能 實現 1 import tkinter as tk2 3 windows tk.tk 4 windows.title 輸入框 文字框 5 windo...
Web桌面應用框架2 著名的WEB桌面應用分析
前一篇文章裡,分析了包括nw.js和electron這種純js框架在內的幾種web桌面應用開發方式,實際上還有一種最古老的方式,那就是嵌入webview的方式。嵌入webview的方式和整個程式都是web視窗不同,僅在視窗的部分子視窗使用webview,和原生ui或directui結合的方式。這種在...
桌面應用程式
桌面應用程式 在台式電腦上執行的應用程式稱為桌面應用程式。比如 記事本,word,excel。這種應用程式的特點是 1 缺少共享 2 直接雙擊就可以執行,不需要ie 3 一般以window的視窗形式存在 web應用程式 1 需要ie來執行 2 一般以網頁的形式的存在 3 可以有很多的客戶端來共享。比...