我有一個代碼,通過單擊按鈕,函式運行。但是在函式內部有兩個標簽,我希望它們在標簽內部顯示文本,而 python 在函式內部從上到下運行。如果它們是 print() 陳述句,它會在 cmd 中顯示,每當游標讀取時,都會顯示訊息。但在 tkinter 中,它會在完全讀取函式后顯示。我該如何管理它?
代碼如下;
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
root.title("Your App crawler")
mainframe = ttk.Frame(root)
mainframe.grid(column=0, row=0, sticky=('N'))
root.columnconfigure(0, weight=1)
root.rowconfigure(0, weight=1)
feet = tk.StringVar()
feet_entry = ttk.Entry(mainframe, width=21, textvariable=feet)
feet_entry.grid(column=0, row=1, sticky=(tk.N),ipadx=100)
feet_entry.focus()
ttk.Label(mainframe, text="enter url ").grid(column=3, row=1, sticky=('N'))
def crawler():
varUrl = feet_entry.get()#input("url (enter) :")
lblGS = ttk.Label(mainframe).grid(column=1, row=2, sticky=('N'))
ttk.Label(mainframe, text="...gathered data from SoundCloud " varStrTitle " ...").grid(column=0, row=3, sticky='W')
print('...gathered data from web' varStrTitle ' ...')
lblES = ttk.Label(mainframe).grid(column=1, row=4, sticky=('N'))
ttk.Label(mainframe, text="...pulled out data also from googlesheets ...").grid(column=0, row=5, sticky='W')
print('...pulled out data also from googlesheets ...')
button = ttk.Button(mainframe, text="scrape", command=crawler)
button.grid(column=3, row=7, sticky=tk.S)
root.bind("<Return>", crawler)
for child in mainframe.winfo_children():
child.grid_configure(padx=5, pady=5)
root.mainloop()
uj5u.com熱心網友回復:
通常,每個 GUI 在運行用戶功能后都會更新視窗 - 以減少重繪,而不是在每次重繪時“閃爍”。
如果您有長時間運行的代碼,那么您可能需要root.update()在每個小部件之后使用來強制 tkinter 一次重繪它(在函式結束之前)。
最少的作業代碼。
我time用來模擬長時間運行的代碼。
import tkinter as tk
from tkinter import ttk
import time
# --- functions ---
def crawler():
ttk.Label(root, text="1").grid(column=0, row=0)
root.update()
time.sleep(2)
ttk.Label(root, text="2").grid(column=0, row=1)
root.update()
time.sleep(2)
ttk.Label(root, text="3").grid(column=0, row=2)
root.update()
time.sleep(2)
ttk.Label(root, text="END").grid(column=0, row=3)
#root.update()
# --- main ---
root = tk.Tk()
button = ttk.Button(root, text="scrape", command=crawler)
button.grid(column=0, row=7)
root.bind("<Return>", crawler)
root.mainloop()
編輯:
root.update()還檢查其他 elwments - 即。如果用戶單擊按鈕運行其他代碼(即停止功能),則可能需要更多root.update()功能來更頻繁地檢查它。
但是對于更復雜的代碼,可能需要在單獨的執行緒中運行函式并使用佇列向主執行緒發送資訊,而主執行緒可能需要root.after(milliseconds, function)運行檢查佇列中的新資料并在視窗中顯示的函式。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/518296.html
標籤:Pythontkintertkinter 按钮tkinter-text
下一篇:運行tkinter模塊失敗
