Python tkinter范围标签未显示

时间:2018-11-06 16:38:13

标签: python tkinter

我是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()

预先感谢

1 个答案:

答案 0 :(得分:0)

好,这是您应该处理的事情的列表。

  1. 在使用tkinter时,您确实应该执行import tkinter as tk,然后使用tk.前缀。这将防止错误地使内置方法过度疲劳。

  2. Python PEP8表示每个缩进使用4个空格,因此开始使用4代替2个空格。

  3. 我认为人们在函数内部使用函数并不常见,我认为这是有充分理由的。

  4. 我从没见过nonlocal的使用(此时仅2年使用Python),所以这对我来说是新的。通常,在tkinter中处理非类函数时会使用global。关于这一点,您可能应该使用class来避免使用global

  5. 在跟踪计数器时,应使用数字变量之一。例如,在这里我们可以使用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()