python - Tkinter:使用另一个类的框架
问题描述
我正在练习创建一个包含不同文件的小项目以获得干净的代码。我想将黄色框架从(fyellow.py)显示到(main.py )中,并使用 的函数从( funbut.py )输入一个标签。Button
这是我的代码示例:(3 个 Python 文件 - main.py、fyellow.py和funbut.py)
主文件
from tkinter import * from fyellow import * import funbut root = Tk() root.geometry("500x500") # Show Yellow Frame into Main from (fyellow.py) myframe = Frameyellow(root) # Button with command - But_fun1 but1 = Button(root, text="Text",command=funbut.but_fun1) but1.pack() root.mainloop()
有趣的.py
from tkinter import * from fyellow import * # Function of Button (but1) PROBLEM HERE! (ERROR - 'framey' is not defined) def but_fun1(): label1 = Label(framey,text="LabelText") label1.place(x=10,y=10)
黄色.py
from tkinter import * class Frameyellow: def __init__(self,rootyellow): self.rootyellow = rootyellow self.framey = Frame(rootyellow, width=200,height=200,bg="yellow") self.framey.pack()
可以解释我可以做些什么来使用self.framey
源文件(fyellow.py)来避免
错误'framey' is not defined
?
解决方案
所以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
或者类似的东西,关键是不要除非您真的知道自己在做什么,否则不要导入所有内容;名称冲突是问题所在。
推荐阅读
- ethereum - 以太坊交易失败
- r - 累加 R 中每个可能组合的值
- javascript - 我有一个登录页面。我想在表单中添加多个操作,或者有另一种解决方案
- c# - 在窗体设计器中访问 UserControl 的 ImageCollection
- python - 如何在不中断先前播放的情况下在 gstreamer 中执行重新触发/重新启动示例
- javascript - React UseEffect 在页面刷新时不起作用
- javascript - 无法使用 Axios.put 从前端到后端获取变量
- qt - 从服务器 php 脚本返回西班牙语字符时出现 Qt 编码错误
- python - Python df 按日期添加行,因此每个组在同一日期结束。填充剩余的行
- python - 在 macbook pro 10.13.6 上安装 Matplotlib