[英]Python/Tkinter dynamically update label
我目前正在嘗試使用Tkinter為現有的python程序創建一個GUI。 該程序為用戶提供了兩個選項,用戶必須從中選擇接受或拒絕。 在使用Tkinter之前,選項被放置在終端中並等待raw_input。 (Y / N)。 我怎樣才能使畫布文本更新為新數據並等待用戶按鈕點擊?
為了使我的問題更具體:如何在Tkinter主循環運行時運行另一個程序代碼並使這兩個代碼交互?
示例代碼如下。
from Tkinter import *
root = Tk()
root.resizable(width=False, height=False)
root.geometry('{}x{}'.format(500,550))
root.wm_title("Tkinter test")
BtnFrame = Frame (root)
BtnFrame.pack(side = BOTTOM)
BtnFrame.place(y=450, x=20)
canvas_1 = Canvas(root, width = "200", height ="300")
canvas_2 = Canvas(root, width = "250", height ="300")
canvas_1.pack(side = LEFT)
canvas_2.pack(side = RIGHT)
textfield_1 = canvas_1.create_text(100,50)
textfield_2 = canvas_2.create_text(100,50,)
def update_textfiel_1(text):
global textfield_1
canvas_1.delete(textfield_1)
textfield = canvas.create_text(100,50,text = text)
def update_textfiel_2(text):
global textfield_2
canvas_2.delete(textfield_2)
textfield1 = canvas1.create_text(100,50,text = text)
Accept = Button(BtnFrame, text="Accept", width=25)
Decline = Button(BtnFrame, text="Decline", width=25)
Accept.pack(side = LEFT)
Decline.pack(side = RIGHT)
root.mainloop()
首先,你的update_textfiel
函數中有一些不一致的變量名,你可以通過使用.itemconfigure
( canvas小部件上的方法的文檔)來大大簡化它。
def update_textfiel_1(new_text):
canvas_1.itemconfigure(textfield_1, text=new_text)
def update_textfiel_2(new_text):
canvas_2.itemconfigure(textfield_2, text=new_text)
如果我理解正確你想要一種方法來擁有一個只需要等待用戶按下其中一個按鈕然后返回結果的功能,這對於tkMessageBox
來說非常簡單:
question = """Do you accept {}?
if you say no you will instead get {}"""
#this message can GREATLY be improved
# But I really don't understand what you are using it for...
def user_confirmation(name1, name2):
response = tkMessageBox.askyesno("Accept or Decline",question.format(name1,name2))
print(response)
if response: # == True
return name1
else:
return name2
我還沒有找到一種方法來制作一個與當前窗口一起使用的阻塞功能...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.