我如何访问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'
答案 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()
结果: