【问题标题】:How do I create a button in Python Tkinter to increase integer variable by 1 and display that variable?如何在 Python Tkinter 中创建一个按钮以将整数变量增加 1 并显示该变量?
【发布时间】:2014-12-23 05:57:39
【问题描述】:

我正在尝试创建一个 Tkinter 程序,它将存储一个 int 变量,并在每次单击按钮时将该 int 变量增加 1,然后显示该变量,以便我可以看到它以 0 开头,然后每次单击按钮时,它都会增加 1。我使用的是 python 3.4。

import sys
import math
from tkinter import *

root = Tk()
root.geometry("200x200")
root.title("My Button Increaser")

counter = 0
def nClick():
    counter + 1

def main_click():
    mLabel = Label(root, text = nClick).pack()


mButton1 = Button(text = "Increase", command = main_click, fg = "dark green", bg = "white").pack()

root.mainloop()

【问题讨论】:

  • 该代码毫无意义。 nClick 实际上并没有改变 counterreturn 任何东西,main_click 用作textmLabel。另外,请注意mLabelmButton1 都将被分配None,因为您尝试在创建小部件的同一行上分配pack

标签: python button tkinter store


【解决方案1】:

您可以使用 Tkinter 变量。当您需要修改其他小部件可能与之交互的数据时,它们特别有用。这是与问题中的代码相似的代码,但不是将counter 定义为普通变量,而是来自 Tkinter 的变量。

import tkinter
import sys

root = tkinter.Tk()
root.geometry("200x200")
root.title("His Button Increaser")

counter = tkinter.IntVar()

def onClick(event=None):
    counter.set(counter.get() + 1)

tkinter.Label(root, textvariable=counter).pack()
tkinter.Button(root, text="Increase", command=onClick, fg="dark green", bg = "white").pack()

root.mainloop()

我们没有将这个变量保存的值传递给Labeltext 属性,而是将变量分配给textvariable 属性,因此当变量的值更新时,Label 将更新显示的相应的文本。

当你想改变变量的值时,你需要调用变量对象的set()方法(见onClick)而不是直接给它赋值。

【讨论】:

    【解决方案2】:

    好的,到目前为止,您的代码存在一些问题。我的回答基本上把你已经拥有的东西变成了最简单的方法来做你想做的事。

    首先,您导入不需要/使用的库(您可能在整个代码中都需要它们,但对于这个问题,仅包含一个最小示例)。接下来,您必须将counter 变量定义为global 变量,以便它在函数中是相同的(在函数内部也可以这样做)。此外,您必须将 counter + 1 更改为 counter += 1 以便它增加变量

    现在代码将能够计数,但是您已将变量设置为按钮,但随后将它们设为 None 类型的对象,以更改此 .pack() 下一行的变量。您可以摆脱第二个功能,因为您只需要一个,然后您将按钮的命令及其文本更改为计数器。现在要更新按钮中的文本,您可以使用配置按钮的.config(text = counter)

    这是最终解决方案(更改按钮值并且没有标签,但这很容易更改):

    from tkinter import *
    
    root = Tk()
    root.geometry("200x200")
    root.title("My Button Increaser")
    
    global counter
    counter = 0
    
    def nClick():
        global counter
        counter += 1
        mButton1.config(text = counter)
    
    mButton1 = Button(text = counter, command = nClick, fg = "darkgreen", bg = "white")
    mButton1.pack()
    
    root.mainloop()
    

    希望有帮助!

    【讨论】:

    • from foo import * 通常是不鼓励使用的 - 如果您发现 tkinter 输入的内容太多,请使用别名(例如 import tkinter as tk)。
    • @jonrsharpe 是的,我通常使用import tkinter as tk,但问题已经是这样了,所以我保持不变!
    猜你喜欢
    • 1970-01-01
    • 2023-01-20
    • 1970-01-01
    • 1970-01-01
    • 2012-05-25
    • 1970-01-01
    • 1970-01-01
    • 2013-04-12
    • 1970-01-01
    相关资源
    最近更新 更多