我想問一下,如果我單擊一個按鈕,它會執行一個命令,如果我再次單擊該按鈕,它會執行另一個命令。基本上我有兩個要在回圈中使用的命令。
#Import tkinter here
from tkinter import *
#defining root function.
root = Tk()
root.geometry('200x100')
#define fuction for labelA
def funcA():
labelA["text"] = "A responds"
#define fuction for labelB
def funcB():
labelB["text"] = "B responds"
#Define button.
button = Button(root, text = 'Click Me', command=lambda:[funcA(), funcB()])
button.pack()
#creating both label A and B
labelA = Label(root, text="A")
labelB = Label(root, text="B")
labelA.pack()
labelB.pack()
root.mainloop()
在此代碼中,當我單擊按鈕時,兩個函式同時運行。但我希望當我點擊按鈕時,第一個功能應該運行,如果我再次點擊按鈕然后運行第二個功能。這將在回圈中(就像首先第一個標簽將更新然后第二個標簽將更新然后再次第一個標簽更新然后再次第二個標簽)。
uj5u.com熱心網友回復:
IIUC 您希望在單擊按鈕時在兩個(或多個)功能之間交替。因此,您可以使用itertools.cycle(內置)創建一個可迭代物件,該物件將在元組或串列或其他內容中的給定專案上永遠回圈。因此,您將這兩個函式添加到回圈中,按鈕呼叫第三個函式,該函式僅獲取回圈中的下一項并呼叫它,依此類推。(我也只使用了一個標簽,因此更改始終可見,因為在您的情況下您看不到任何更改,但我相信您可以根據需要調整這些功能):
import tkinter as tk
import itertools
def func_a():
label.config(text='a responds')
def func_b():
label.config(text='b responds')
toggle_funcs = itertools.cycle((func_a, func_b))
def toggle():
func = next(toggle_funcs)
func()
root = tk.Tk()
label = tk.Label(root, text='None')
label.pack()
btn = tk.Button(root, text='Click Me', command=toggle)
btn.pack()
root.mainloop()
另外:
我強烈建議*在匯入某些內容時不要使用通配符 ( ),您應該匯入您需要的內容,例如from module import Class1, func_1, var_2等等或匯入整個模塊:import module然后您也可以使用別名:import module as md或類似的東西,重點是不要除非您確實知道自己在做什么,否則不要匯入所有內容;名稱沖突是問題所在。
我強烈建議遵循PEP 8 - Python 代碼風格指南。函式名和變數名應該在snake_case,類名應該在CapitalCase. 在函式和類宣告周圍有兩個空行。物件方法定義周圍有一個空行。
uj5u.com熱心網友回復:
我認為你可以將按鈕保存在一個變數中,當 function1 在執行后運行時將command屬性設定為 function2 并且在 function2 執行后設定command為 function1
uj5u.com熱心網友回復:
如果按鈕被按下,你應該有一個布林值跟蹤。您也可以在函式中更改此值。
somebool = False
#define fuction for labelA
def funcA():
if somebool:
labelA["text"] = "A responds"
#define fuction for labelB
def funcB():
if !somebool:
labelB["text"] = "B responds"
請注意,如果您想從另一個按鈕單獨訪問一個功能,這種方法并不好。但是,如果您有這樣的布爾狀態,則不需要 2 個單獨的函式。您可以為按鈕創建一個事件處理程式,然后從那里呼叫 funcA 或 funcB。
somebool = False
def handler():
funcA() if somebool else funcB()
def funcA():
labelA["text"] = "A responds"
def funcB():
labelB["text"] = "B responds"
button = Button(root, text = 'Click Me', command=handler)
如果您不關心重用函式,請更改函式中按鈕的命令屬性以運行另一個。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/401004.html
