python - Python 类从 tk.Frame 继承,具有列表属性
问题描述
我正在自学 tkinter(面向对象的风格)。
我希望我的班级制作一个带有单个标签的简单窗口。我希望标签的文本来自一个属性,一个列表的第一个元素。这是一个用 Paint 制作的模型,我希望窗口看起来像:
但是当我运行下面的代码时,我收到一条错误消息(TypeError: create() argument 1 must be str or None, not list
)。我不知道如何通过“my_list”来创建我的类的实例。
谢谢你的帮助!
import tkinter as tk
my_list = [222, 333, 444, 555]
class MyWindow(tk.Frame):
def __init__(self, parent, lst):
self.lst = lst
tk.Frame.__init__(self, parent)
self.window_height = 200
self.window_width = self.window_height * 2
canvas = tk.Canvas(self, width=self.window_width, height=self.window_height)
canvas.pack()
label = tk.Label(self, text=str(self.lst[0]))
label.pack()
root= tk.Tk(my_list)
MyWindow(root).pack()
root.mainloop()
解决方案
首先,您不能传递my_list
给tk.Tk()
.
其次,您MyWindow
需要两个参数:parent
和list
(尽管您应该将第二个参数命名为不同的名称)。
第三,在创建小部件时调用几何管理器(pack
、、grid
或place
)是一种不好的做法,应该避免。
以下是最终代码块的外观:
root= tk.Tk()
mywindow = MyWindow(root, my_list)
mywindow.pack()
这将最终得到一个底部有标签的窗口。如果您希望它位于顶部,请颠倒您在框架中打包项目的顺序和/或明确说明它们应该去哪里:
label.pack(side="top", fill="x")
canvas.pack(side="bottom", fill="both", expand=True)
推荐阅读
- angular - 错误 TS2315:类型“ElementRef”不是通用的。吴蚂蚁设计
- glsl - Cesium 在 Cartesian3 空间中定义的 AxisAligned 边界框内绘制地球表面
- data-binding - Angular 7-组件之间动态共享变量
- c# - 如何正确处理 SpeechSynthesizer 以进行异步文本转语音?
- prestashop - Prestashop:如何在结帐标题中获取步骤号
- javascript - Javascript中的“附加”
- python - 用于连接 psycopg2 postgresql 的 python 文件
- excel - 在 Excel VBA 中设置对 Outlook 365 文件夹的引用
- javascript - 第二个 onclick 事件不起作用(首先做一些更改,第二个需要撤消它们)
- date - 如何使用时刻将字符串日期转换为 unix 格式