我不能很好地表達我的問題,但這里有一些背景。
我在 tkinter 中創建了一個按鈕,并.place(x, y)在 if 條件中使用,但現在我想在滿足另一個條件時銷毀它。即使滿足第二個條件,它也不會被破壞。請幫忙。
from tkinter import *
window = Tk()
button = Button(window, text='Button')
x = 10
y = 10 # just imagine that y became 5 at some point
if x == 10:
button.place(x=0, y=0)
elif y == 5:
button.destroy()
window.mainloop()
uj5u.com熱心網友回復:
我不確定你想在這里完成什么,但你似乎誤解了 if-elif-else 的作業原理。它旨在為同一變數的值提供替代方案,或者在任何情況下,兩種可能性都不可能同時發生以獲得所需的結果。Elif 是“else if”的縮寫,這意味著僅當“if”陳述句為假時才對其進行評估。
在您的情況下,x 已經等于 10,并且您在任何時候都不會更改它,因此始終滿足“if”條件并且代碼永遠不會到達“elif”陳述句。
如果 y 在變化并達到 5,則可以將“elif”陳述句更改為“if”,并在創建按鈕時添加 y 必須不等于 5 的條件(否則,它將不斷創建和銷毀自己)。
此外,由于您當前的代碼有效,因此沒有回圈運行。代碼只計算一次。
如果我理解你想做什么,那就是這樣的事情。
from tkinter import *
window = Tk()
x = IntVar()
y = IntVar()
x.set(10)
y.set(10)
button = Button(window, text='Button', command=lambda: y.set(5))
def loop_this():
if (x.get() == 10) and (y.get() != 5):
button.place(x=0, y=0)
if y.get() == 5:
button.destroy()
window.after(1000, loop_this)
loop_this()
window.mainloop()
一般來說,使用 Tkinter 時最好使用 Tkinter 變數(IntVar、StringVar、BoolVar)。為了復制 y = 5 的場景,我在按下按鈕時讓它等于 5,但它可以在代碼的其他地方進行更改,并且將以相同的方式作業。主要是把東西放到一個函式中,附加到主視窗,回圈運行。為此,我們使用.after(time_in_miliseconds_between_loops, function_to_loop_without_brackets)
并在之前呼叫該函式window.mainloop()。希望這能回答你的問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/462083.html
