[英]How to make a function returns value whenever a tkinter button is pressed?
我是 Tkinter 和 Python 的新手。 我正在使用一些復選框和按鈕功能。 我希望輸出為output: 0, output: 1,...
(0 是未勾選復選框時,1 是勾選復選框時)。 每當按下提交按鈕時都會打印輸出。 由於此時,它只在開頭打印一次
我只是想知道是否有任何方法可以做到這一點
謝謝你,祝你有美好的一天 :)
import tkinter as tk
from tkinter import *
root = tk.Tk()
class Blah:
def __init__(self):
self.varAll = IntVar()
def Check(self):
but1 = Checkbutton(root, text='Selected', variable = self.varAll)
but1.pack(side=LEFT, pady=4)
b2 = tk.Button(root, text='Submit', command= self.State)
b2.pack(side=tk.LEFT, padx=5, pady=15)
b2.wait_variable(self.varAll)
def State(self):
print('State: ', self.varAll.get())
self.state = self.varAll.get()
return self.state
def Main():
listt = Blah()
listt.Check()
#root.wait_variable(listt.varAll)
print("output ", listt.varAll.get())
if __name__ == '__main__':
Main()
你缺少一個.mainloop
。 將其添加到print
語句后的Main
函數中,如下所示:
def Main():
listt = Blah()
listt.Check()
#root.wait_variable(listt.varAll)
print("output ", listt.varAll.get())
root.mainloop()
您可以通過向IntVar
添加“觀察者”回調來獲得該輸出,該回調將在其值更改時自動調用 — 請參閱文章The Variable Classes (BooleanVar, DoubleVar, IntVar, StringVar) 。
這是我將如何修改您的代碼以使用它。 注意添加的Notify()
方法。 我還注釋掉了一些我認為你不需要的東西。 沒有理由對State()
返回任何東西,因為它只能由被稱為tkinter
,而那些wait_variable()
不需要調用,或者(如果明確調用mainloop()
自己)。
import tkinter as tk
from tkinter import *
class Blah:
def __init__(self):
self.varAll = IntVar()
self.varAll.trace('w', self.Notify)
def Check(self):
but1 = Checkbutton(root, text='Selected', variable=self.varAll)
but1.pack(side=LEFT, pady=4)
b2 = tk.Button(root, text='Submit', command=self.State)
b2.pack(side=tk.LEFT, padx=5, pady=15)
# b2.wait_variable(self.varAll)
def State(self):
print('State: ', self.varAll.get())
self.state = self.varAll.get()
# return self.state
def Notify(self, *args):
print("output ", self.varAll.get())
def Main():
listt = Blah()
listt.Check()
# root.wait_variable(listt.varAll)
# print("output ", listt.varAll.get())
root.mainloop()
if __name__ == '__main__':
root = tk.Tk()
Main()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.