首页 > 解决方案 > Tkinter:使用另一个类的框架

问题描述

我正在练习创建一个包含不同文件的小项目以获得干净的代码。我想将黄色框架从(fyellow.py)显示到(main.py )中,并使用 的函数从( funbut.py )输入一个标签。Button这是我的代码示例:(3 个 Python 文件 - main.pyfyellow.pyfunbut.py

可以解释我可以做些什么来使用self.framey源文件(fyellow.py)来避免
错误'framey' is not defined

标签: pythonpython-3.xtkinter

解决方案


所以main.py文件看起来像这样:

from tkinter import Tk, Button
from fyellow import FrameYellow
from funbut import place_label

root = Tk()
root.geometry("500x500")

my_frame = FrameYellow(root)
my_frame.pack()

but1 = Button(root, text="Text", command=lambda: place_label(my_frame))
but1.pack()

root.mainloop()

fyellow.py像这样(虽然创建一个唯一目的是让框架具有不同颜色的类是没有意义的,只需使用参数并创建一个正常的框架):

from tkinter import Frame


class FrameYellow(Frame):
    def __init__(self, master, **kwargs):
        super().__init__(master, **kwargs, bg='yellow')

funbut.py应该是这样的:

from tkinter import Label


def place_label(parent, text='Text', pos=(0, 0)):
    Label(parent, text=text).place(x=pos[0], y=pos[1])

另外:
我强烈建议不要在导入某些东西时使用通配符(*),你应该导入你需要的东西,例如from module import Class1, func_1, var_2等等,或者导入整个模块:import module然后你也可以使用别名:import module as md或者类似的东西,关键是不要除非您真的知道自己在做什么,否则不要导入所有内容;名称冲突是问题所在。


推荐阅读