我有一個非常簡單的程式,每次單擊按鈕時,我想從檔案中顯示一個隨機行。
問題是程式啟動時顯示一個新行,但是當我單擊按鈕時沒有任何反應,有人可以解釋我為什么嗎?
from random import randrange
from tkinter import *
def entree():
n=randrange(251)
fs = open('lexique','r')
liste = fs.readlines()
return liste[n]
fen = Tk()
fen.title("lexique anglais politique")
defi = StringVar()
defi.set(entree())
lab = Label(fen, textvariable=defi).pack()
Button(fen, text='Beste Bat', command=entree).pack()
fen.mainloop()
uj5u.com熱心網友回復:
正如評論之一(@matszwecja)中所述,您的entree()函式除了回傳值之外并沒有真正做任何事情。
您的代碼中的任何內容都不會更新實際標簽。嘗試這樣的事情:
from random import randrange
from tkinter import *
def entree():
n=randrange(251)
fs = open('lexique','r')
liste = fs.readlines()
return liste[n]
def update_label():
lab.config(text=entree())
fen = Tk()
fen.title("lexique anglais politique")
lab = Label(fen, text=entree())
lab.pack()
Button(fen, text='Beste Bat', command=update_label).pack()
fen.mainloop()
在此示例中,該entree()函式用于從檔案中獲取一行,該update_label()函式用于實際更新標簽。
此外,如果您希望能夠更新標簽,則必須在將其分配給變數后對其進行打包。
在旁注中,值得注意的是,未來可能會改變的硬編碼值通常被認為是不好的做法。在這方面,我認為以entree()這種方式編碼函式可能是一個更好的主意:
def entree():
fs = open('lexique','r')
liste = fs.readlines()
n=randrange(len(liste))
return liste[n]
這樣,如果您在“lexique”檔案中添加或洗掉行,您將不必更改代碼。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/422087.html
標籤:
上一篇:更改一個比例小部件將更改第二個
