簡體   English   中英

每當按下 tkinter 按鈕時,如何使函數返回值?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM