这是我丑陋的MWE / MCVE。
代码如下。
基本上,我希望用户在小的self.integer
框中键入内容时,更改0
变量(Entry
)。
我以为我在official documentation中看到了一些相关信息,但不确定。我对此不太了解。另外,我认为有几种不同的实现方法。
from tkinter import *
class Main():
def __init__(self):
self.main = Tk()
#INTEGER
self.integer = 0
#BUTTONS
Button(self.main,text='Quit',command=self.main.destroy).pack()
Button(self.main,text='+',command=self.plus_one).pack()
Button(self.main,text='-',command=self.take_one).pack()
#ENTRY
Entry(self.main,textvariable=self.integer,justify=CENTER,width=4).pack()
#MAINLOOP
mainloop()
def plus_one(self):
self.integer = self.integer + 1
self.entry0.delete(0,END)
self.entry0.insert(0,self.integer)
def take_one(self):
self.integer = self.integer - 1
self.entry0.delete(0,END)
self.entry0.insert(0,self.integer)
Main()
答案 0 :(得分:1)
应该使用IntVar()
而不是直接指向Integer的变量。这样做的原因是,当您将textvariable
设置为Entry
框时,您需要使用IntVar()
或StringVar()
。每当您在“输入框”中输入内容或在代码中更新IntVar的值时,这将允许更新该值。
看一下这段修改后的代码示例。我进行了一些清理,使其符合PEP8标准。我还将您的self.integer
更改为IntVar()
。
import tkinter as tk
class Main(tk.Tk):
def __init__(self):
tk.Tk.__init__(self)
#INTEGER
self.integer = tk.IntVar()
self.integer.set(0)
#BUTTONS
tk.Button(self, text='Quit', command=self.destroy).pack()
tk.Button(self, text='+', command=self.plus_one).pack()
tk.Button(self, text='-', command=self.take_one).pack()
#ENTRY
self.entry0 = tk.Entry(self, textvariable=str(self.integer), justify="center", width=4)
self.entry0.pack()
def plus_one(self):
x = self.integer.get() + 1
self.integer.set(x)
def take_one(self):
x = self.integer.get() - 1
self.integer.set(x)
app = Main()
app.mainloop()
要检查IntVar()
是否被自动更新,无论您如何添加到“输入”框中,都可以使用打印self.integer
的按钮来确保其正常工作。
import tkinter as tk
class Main(tk.Tk):
def __init__(self):
tk.Tk.__init__(self)
#INTEGER
self.integer = tk.IntVar()
self.integer.set(0)
#BUTTONS
tk.Button(self, text='Quit', command=self.destroy).pack()
tk.Button(self, text='+', command=self.plus_one).pack()
tk.Button(self, text='-', command=self.take_one).pack()
tk.Button(self, text="Print IntVar", command=self.print_intvar).pack()
#ENTRY
self.entry0 = tk.Entry(self, textvariable=str(self.integer), justify="center", width=4)
self.entry0.pack()
def plus_one(self):
x = self.integer.get() + 1
self.integer.set(x)
def take_one(self):
x = self.integer.get() - 1
self.integer.set(x)
def print_intvar(self):
print(self.integer.get())
app = Main()
app.mainloop()
答案 1 :(得分:0)
我向Mike解决方案添加了绑定,因为除非您按+或-按钮,否则您的IntVar不会更改。如果仅使用按钮,那并不重要,但是如果调用intern方法来获取IntVar值,那将很重要。
name
答案 2 :(得分:-1)
这是一个最小的工作示例。
我所做的更改越少越好。
italicized
。bold
。#commented & italicized
。 italicized & bold
。 from tkinter import *
class Main():
def __init__(self):
self.main = Tk()
#INTEGER
#self.integer = 0
self.integer = IntVar(0)
#BUTTONS
Button(self.main,text='Quit',command=self.main.destroy).pack()
Button(self.main,text='+',command=self.plus_one).pack()
Button(self.main,text='-',command=self.take_one).pack()
#ENTRY
Entry(self.main,textvariable=self.integer,justify=CENTER,width=4).pack()
#MAINLOOP
mainloop()
def plus_one(self):
self.integer.set(self.integer.get()+1)
#self.entry0.delete(0,END)
#self.entry0.insert(0,self.integer)
def take_one(self):
self.integer.set(self.integer.get()-1)
#self.entry0.delete(0,END)
#self.entry0.insert(0,self.integer)
Main()