【问题标题】:How to call an action when a button is clicked in Tkinter在 Tkinter 中单击按钮时如何调用操作
【发布时间】:2012-05-01 12:40:25
【问题描述】:

我第一次尝试使用 Tkinter,并尝试在单击按钮时调用一个函数。这是我的代码的一部分。 mt 指的是我通过将其附加到标签而使其动态化的标签,以便我可以更改标签的内容。我希望用户能够在输入框中输入内容,点击按钮,然后它会将标签更改为输入的内容。

    def new(self):
        mt.set("New")
        e1 = Entry(master)
        e1.pack()
    def new_ok(self):
        mt.set("OK")
        #the next part is what I need help with
        if (checks if button has been clicked) button has been clicked:
            mt.set("#what it says in the entry box#")

我应该怎么做?我查看了教程并阅读了它们,但没有一个明确承认如何检查按钮是否被按下并做出响应。

【问题讨论】:

  • 这几乎就像您在尝试创建自己的事件循环,这是 Tkinter 的工作,而不是您的工作。 Tkinter 在这里有一个“不要打电话给我,我会打电话给你”的政策。你给它一个回调,它会在正确的事件触发时调用它。 John Gaines Jr 的答案中的链接显示了它是如何完成的。

标签: python user-interface tkinter


【解决方案1】:

如果问题是:“如何更新标签小部件?”
那么答案就是使用小部件的configure 方法。

# Tkinter in Python 2.7 & tkinter in 3.2
import Tkinter as tk

class GUI(tk.Tk):
    def __init__(self):
        tk.Tk.__init__(self)

        bF = tk.Frame(self, bd=8, relief='sunken')
        bF.pack(expand='true', fill='x')
        changeButton = tk.Button(bF, text='Change', bd=4, fg='white',
                                relief='groove', activebackground='green',
                                command=self.change_label)
        changeButton.pack()

        self.entryLabel = tk.Label(self, text='Hello')
        self.entryLabel.pack()

        self.mEntry = tk.Entry(self, bd=4, relief='sunken')
        self.mEntry.pack()

    def change_label(self):
        data = self.mEntry.get()
        self.entryLabel.configure(text=data)


gui = GUI()
gui.mainloop()

你会想要让你的 GUI 像这个例子中一样;
这样你就可以使用自我。前缀来引用用另一种方法制作的小部件。

在您的示例中,您可能会说“mt”是control variable
答案仍然是创建一个类,以便您可以使用 self.前缀。

除非您愿意,否则控制变量可能不是必需的
当您更改 Entry 小部件的内容时要更新的标签:

import Tkinter as tk

class GUI(tk.Tk):
    def __init__(self):
        tk.Tk.__init__(self)

        bF = tk.Frame(self, bd=8, relief='sunken')
        bF.pack(expand='true', fill='x')

        var = tk.StringVar()
        var.set('Hello')
        entryLabel = tk.Label(self, textvariable=var)
        entryLabel.pack()

        mEntry = tk.Entry(self, bd=4, relief='sunken', textvariable=var)
        mEntry.pack()

gui = GUI()
gui.mainloop()

【讨论】:

    【解决方案2】:

    我不是 Tkinter 奇才,但我在 Tkinter 的模块文档中看到的第一件事是 A Simple Hello World Program,其中包含您问题的答案。 (与大多数 GUI 工具包一样,答案是回调或事件处理函数。)成员函数 say_hiHello 按钮的回调。

    【讨论】:

    • 谢谢,但我也想知道当条目在不同的函数中定义时如何调用新函数中的条目
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-15
    • 1970-01-01
    • 2019-10-28
    • 1970-01-01
    • 2020-01-10
    • 2018-11-26
    相关资源
    最近更新 更多