如何调用此tkinter gui函数?

时间:2018-08-21 18:03:42

标签: python python-3.x function class tkinter

我如何访问Mygui类中的Windows函数? 我想在Tkinter框中创建彩色内容# 但我无法将价值传递给它。

      from tkinter import *
            class Mygui:
                def window(self, colour):
                    self.main_window=Tk()
                    self.main_window.geometry('300x100')
                    self.main_window.title('Login')
                    self.top_frame=Frame(self.main_window)
                    self.top_frame.pack()
                    self.label=Label(self.top_frame, fg=colour, text="Sample Text", width=45)
                    self.label.pack(side="top")
                    self.label1=Label(self.top_frame,text=" ", width=45)
                    self.label1.pack(side="top")
                    self.my_button = Button(self.main_window, text="Retry", command=self.do_something,  height=2, width=18)
                    self.my_button.pack()

                    mainloop()
                def do_something(self):
                    print('ok')

            class login:
                def example(self):
                    print("Start")
                    Mygui.window('blue')

            a = login.example(' ')

我得到的错误是:

  Start
  Traceback (most recent call last):
  File "B:/data/loginMech/test.py", line 25, in <module>
  a = login.example(' ')
  File "B:/data/loginMech/test.py", line 23, in example
  Mygui.window('blue')
  TypeError: window() missing 1 required positional argument: 'colour'

2 个答案:

答案 0 :(得分:2)

Mygui是一个类,而不是 function 。因此,您必须构造一个实例,如下所示:

gui = Mygui()

然后您可以在该实例上调用方法:

gui.window('blue')

编写Mygui.window时,这是一个未绑定的方法,您可以通过将self自变量以及其他自变量传递给它来调用该方法。但是您仍然需要通过self来传递一些东西:

gui = Mygui()
Mygui.window(gui, 'blue')

通常,您不想这样做。在某些情况下,未绑定方法很有用,但是如果有一种方法,您可能知道您有一种。


您还需要对login做同样的事情:

log = login()
log.example()

通过调用login.example,您将再次使用未绑定方法。然后,您将' '作为self参数传递。这没有任何意义,因为' '不是login实例,但是CPython 3.x碰巧不检查该错误,因此您可以摆脱它。

答案 1 :(得分:1)

Abarnet指出了一个修复程序,但是在Tkinter中,最好继承自Tkinter类Tk以启动GUI。

以这个例子为例。更少的代码并产生所需的相同结果。

import tkinter as tk

class MyGUI(tk.Tk):
    def __init__(self, colour):
        tk.Tk.__init__(self)
        self.geometry('300x100')
        self.title('Login')
        tk.Label(self, fg=colour, text="Sample Text", width=45, pady=10).grid(row=0, column=0)
        tk.Button(self, text="Retry", command=self.do_something, height=2, width=18).grid(row=1, column=0)

    def do_something(self):
        print('ok')


MyGUI("Blue").mainloop()

结果:

enter image description here