【问题标题】:How to call this tkinter gui function?如何调用这个 tkinter gui 函数?
【发布时间】:2019-01-27 23:27:19
【问题描述】:

如何在 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'

【问题讨论】:

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


    【解决方案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()
    

    结果:

    【讨论】:

      【解决方案2】:

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

      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 碰巧没有检查该错误,所以你可以侥幸逃脱。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-07-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-12
        • 2016-02-21
        • 1970-01-01
        • 2020-07-10
        相关资源
        最近更新 更多