带有Tkinter和多个文件的Python GUI

时间:2018-04-11 13:55:16

标签: python python-3.x class user-interface tkinter

所以我意识到我在代码中犯了一些初学者的错误。所以我向第一次尝试做了几步。我有一个带有一个窗口的小GUI。

现在我有一些问题:

  1. 为什么还要问(自己)?
  2. 如何调用(在这里调用正确的单词?)来自另一个py文件?
  3. 提前致谢。

    from tkinter import *
    
    class MyFirstGUI(object):
        def __init__(self, master):
            self.master = master
            master.title("A simple GUI")
    
            self.label = Label(master, text="This is our first GUI!").pack()
    
            self.greet_button = Button(master, text="Greet", command=self.greet).pack()
    
            self.close_button = Button(master, text="Close", command=self.quit).pack()
    
        def greet(self):
            print('Hello')
    
        def quit(self):
            self.master.destroy()
    
    
    root = Tk()
    my_gui = MyFirstGUI(root)
    root.mainloop()
    

2 个答案:

答案 0 :(得分:2)

1。 为什么还要问候(自我)?

函数greet()MyFirstGUI类的函数,您可以看到当您将此函数绑定到greet_button时,函数将放在self之后。这意味着该函数具有指向selfMyFirstGUI)的链接。这个链接是通过将self放在函数定义中来实现的。

2。我如何调用(在这里调用正确的单词?)来自另一个py文件? (我不确定我明白你的要求)

是的电话是对的!如果要从另一个文件调用此函数,则必须在主文件中导入MyFirstGUI并创建此对象的实例。

mainFile.py:

from tkinter import *
from guiFile import MyFirstGUI

root = Tk()
my_gui = MyFirstGUI(root)
my_guy.greet()
root.mainloop()

guiFile.py:

from tkinter import *    
class MyFirstGUI(object):
    def __init__(self, master):
        self.master = master
        master.title("A simple GUI")

        self.label = Label(master, text="This is our first GUI!").pack()

        self.greet_button = Button(master, text="Greet", command=self.greet).pack()

        self.close_button = Button(master, text="Close", command=self.quit).pack()

    def greet(self):
        print('Hello')

    def quit(self):
        self.master.destroy()

答案 1 :(得分:1)

  

为什么还要问(自己)?

其他程序语言使用@来定义不同的类属性,但是python使用self。在类中使用self来让类知道有一个类属性或方法可以从类中的任何地方(或从类外部)访问。

示例好处:如果我们有一个更新变量的函数和对该函数的调用,我们将需要使用global,并且必须在代码中定义函数之后调用该函数。 / p> 像这样:

x = 0

def update_x():
    global x
    x+=1
    print(x)

update_x()

然而,在一个类中,我们可以避免使用global并在调用这些方法的代码之后定义我们所有的方法(使用self的类中的函数),这样我们可以让事情变得更清晰。

像这样:

class MyClass():
    def __init__(self):
        self.x = 0
        self.update_x()

    def update_x(self):
        self.x +=1
        print(self.x)

MyClass()
  

如何调用(在这里调用正确的单词?)来自另一个py文件?

您需要像导入库一样导入文件。

例如,如果您的主程序位于main.py并且在名为py的同一目录中有另一个test.py文件,并且您希望调用test.py中的内容来自main.py文件的文件,您需要导入test.py文件上的main.py文件

对于大多数属于同一目录的文件,请执行以下操作:

import test

有时你的程序是某种包,你可能需要像这样提供导入。

import package_name.test

您可以将其用作测试示例:

test.py文件包含:

def plus_one(number):
    x = number + 1
    return x

main.py文件包含:

import test

x = test.plus_one(5)
print(x)

控制台输出应为:

6