切换LED Python 3.x tkinter

时间:2017-09-12 09:19:54

标签: python-3.x tkinter raspberry-pi3 gpio led

我尝试使用GUI打开和关闭LED。

当我执行代码时,我得到一个空白框,只是说" tk"标题。

import tkinter as tk

class Application(tk.Frame):
    def __init__(self, master=None): 
        super().__init__(master)
        self.pack()
        Label(frame, text='Turn LED ON').grid(row=0, column=0)
        Label(frame, text='Turn LED OFF').grid(row=1, column=0)

        self.button = Button(frame, text='LED 0 ON', command=self.convert0)
        self.button.grid(row=2, columnspan=2)

    def convert0(self, tog=[0]):
        tog[0] = not tog[0]
        if tog[0]:
            self.button.config(text='LED 0 OFF')
        else:
            self.button.config(text='LED 0 ON')

root = tk.Tk()
app = Application(master=root)
app.mainloop()

1 个答案:

答案 0 :(得分:0)

您的代码需要多次修复。

首先,按原样运行它会给我以下错误:

NameError: name 'Label' is not defined

当然,事实并非如此。 定义的是tk.Label,所以我们改变这两行:

Label(frame, text='Turn LED ON').grid(row=0, column=0)
Label(frame, text='Turn LED OFF').grid(row=1, column=0)

成:

tk.Label(frame, text='Turn LED ON').grid(row=0, column=0)
tk.Label(frame, text='Turn LED OFF').grid(row=1, column=0)

现在,我提出了以下错误:

NameError: name 'frame' is not defined

果然,它也不是。 您可能正在引用Application类扩展tk.Frame类的事实。 嗯,这是真的,但这并没有告诉我们frame是什么。 我假设frame表示“实例,但被视为Frame实例”。 在这种情况下,self就足够了(实际上它就是需要的)。 所以我们在这里,以下三行:

tk.Label(frame, text='Turn LED ON').grid(row=0, column=0)
tk.Label(frame, text='Turn LED OFF').grid(row=1, column=0)

self.button = Button(frame, text='LED 0 ON', command=self.convert0)    

成为:

tk.Label(self, text='Turn LED ON').grid(row=0, column=0)
tk.Label(self, text='Turn LED OFF').grid(row=1, column=0)

self.button = Button(self, text='LED 0 ON', command=self.convert0) 

现在,我被告知

NameError: name 'Button' is not defined

我相信你已经开始理解这一点了。 因此,我们将Button替换为tk.Button

self.button = tk.Button(self, text='LED 0 ON', command=self.convert0)

在这里,显示窗口,显示两个标签和一个漂亮按钮,单击时文本会发生变化。