我是python的新手,我目前遇到范围问题。 我正在尝试通过函数调用弹出窗口。但是,我确实认为,使用一堂课可能会更好。就像我说的我是初学者。欢迎使用语法修复程序和更好的编程方法。我的代码如下
from tkinter import *
def showProdScreen():
root = Tk()
root.title("Production")
count = 0
countStr = StringVar()
countStr.set("0");
def countUp():
nonlocal count
nonlocal countStr
print(countStr.get())
count = count + 1
countStr.set(count)
up = Button(root, text = "AddCnt", command = countUp, width = 15, font = ("Curier", 16))
countl = Label(root, text = "Count", relief = RAISED, font = ("Curier", 20), width = 10)
countVal = Label(root, textvariable = countStr, relief = RAISED, font = ("Curier", 20), width = 10)
countVal.pack();
countl.pack();
up.pack()
预先感谢
答案 0 :(得分:0)
好,这是您应该处理的事情的列表。
在使用tkinter时,您确实应该执行import tkinter as tk
,然后使用tk.
前缀。这将防止错误地使内置方法过度疲劳。
Python PEP8表示每个缩进使用4个空格,因此开始使用4代替2个空格。
我认为人们在函数内部使用函数并不常见,我认为这是有充分理由的。
我从没见过nonlocal
的使用(此时仅2年使用Python),所以这对我来说是新的。通常,在tkinter中处理非类函数时会使用global
。关于这一点,您可能应该使用class来避免使用global
。
在跟踪计数器时,应使用数字变量之一。例如,在这里我们可以使用IntVar()
,然后就不需要使用计数器进行跟踪。
以下是一些示例,其中包括清理代码,非OOP示例和类示例。
您在更新的问题中正在做的是IMO,这是构建GUI的一种奇怪方法。这是您清理并工作的示例:
from tkinter import *
def showProdScreen():
root = Tk()
root.title("Production")
count = 0
countStr = StringVar()
countStr.set("0");
def countUp():
nonlocal count
nonlocal countStr
print(countStr.get())
count = count + 1
countStr.set(count)
Button(root, text="AddCnt", command=countUp, width=15, font=("Curier", 16)).pack()
Label(root, text="Count", relief=RAISED, font=("Curier", 20), width=10).pack()
Label(root, textvariable=countStr, relief=RAISED, font=("Curier", 20), width=10).pack()
root.mainloop()
showProdScreen()
那就是说,我不确定为什么要在函数内部使用这种函数来构建它。
以非OOP方式构建时,应在此处使用global和function。 对于非OOP示例,我将执行以下操作:
import tkinter as tk
root = tk.Tk()
root.title("Production")
count_str = tk.IntVar()
count_str.set(0)
def countUp():
global count_str
count_str.set(count_str.get() + 1)
tk.Label(root, textvariable=count_str, relief="raised", font=("Curier", 20), width=10).pack()
tk.Label(root, text="Count", relief="raised", font=("Curier", 20), width=10).pack()
tk.Button(root, text="AddCnt", command=countUp, width=15, font=("Curier", 16)).pack()
root.mainloop()
对于一个类示例,我可以这样做:
import tkinter as tk
class Example(tk.Tk):
def __init__(self):
tk.Tk.__init__(self)
self.title("Production")
self.count_str = tk.IntVar()
self.count_str.set(0)
tk.Label(self, textvariable=self.count_str, relief="raised", font=("Curier", 20), width=10).pack()
tk.Label(self, text="Count", relief="raised", font=("Curier", 20), width=10).pack()
tk.Button(self, text="AddCnt", command=self.count_up, width=15, font=("Curier", 16)).pack()
def count_up(self):
self.count_str.set(self.count_str.get() + 1)
Example().mainloop()