【发布时间】:2019-10-13 00:25:04
【问题描述】:
首先 - 非常感谢 @Bryan Oakley 在这里提供了一个很好的答案:[Creating a table look-a-like Tkinter 这让我开始着手解决我想做的事情。
目标:为我的 rogue-like 游戏创建一个简单的“角色表”。 (超级简单的基于文本的游戏),在我的 UI 中使用 Tkinter 中的 Grid Geometry。
过程:我想学习如何像表格一样创建网格并将统计信息放置在每个插槽中(现在我只是使用占位符字符串格式以方便参考来自 Bryan Oakley 之前的回答。)
问题:我尝试修改第 8、29 和 30 行以包含“columnspan”作为参数。 Columnspan 通常是一个参数,它可以在许多小部件中使用,以让一个项目占据更多“槽”。
原代码第8行没有6,第29行没有columnspan,第30行没有[columnspan]。
我尝试过的一些事情:
我尝试注释掉第 25 行中的
for column in range位以删除表的weight=1组件。这并没有给人留下任何深刻的印象(实际上代码在没有这个的情况下可以在其原始状态下工作。)我尝试更改第 29 行中
columnspan, value部分的顺序,因为我认为可能将 columnspan after 值放在导致问题的原因(实际上它确实导致了完全不同的问题.) 这就是为什么我现在在 值之前有列跨度。我尝试在 set 方法中创建一个新行,以将
columnspan作为配置添加到小部件。
# begin tkinter sample unit menu
import tkinter as tk
class ExampleApp(tk.Tk):
def __init__(self):
tk.Tk.__init__(self)
t = SimpleTable(self, 4, 6)
t.pack(side="top", fill="x")
t.set(0, 0, 6, "Hello, world")
class SimpleTable(tk.Frame):
def __init__(self, parent, rows=4, columns=6):
# use black background so it "peeks through" to
# form grid lines
tk.Frame.__init__(self, parent, background="black")
self._widgets = []
for row in range(rows):
current_row = []
for column in range(columns):
label = tk.Label(self, text="%s/%s" % (row, column),
borderwidth=0, width=10)
label.grid(row=row, column=column, sticky="nsew", padx=1, pady=1)
current_row.append(label)
self._widgets.append(current_row)
for column in range(columns):
self.grid_columnconfigure(column, weight=1)
def set(self, row, column, columnspan, value):
widget = self._widgets[row][column][columnspan]
widget.configure(text=value)
if __name__ == "__main__":
app = ExampleApp()
app.mainloop()
期望:我希望输出允许使用 columnspan 参数,从而使整个第一列成为单个块,在顶部显示“Hello, world”。
结果:我收到以下错误:
Traceback (most recent call last):
File "tkintersampleunitmenu.py", line 35, in <module>
app = ExampleApp()
File "tkintersampleunitmenu.py", line 8, in __init__
t.set(0, 0, 6, "Hello, world")
File "tkintersampleunitmenu.py", line 31, in set
widget = self._widgets[row][column][columnspan]
File "/Users/#/anaconda3/lib/python3.6/tkinter/__init__.py", line 1486, in cget
return self.tk.call(self._w, 'cget', '-' + key)
***TypeError: must be str, not int***
我掌握(或者可能没有掌握)是 python 期望 columnspan 是一个字符串?但为什么?为什么它不寻找像行/列这样的整数?
【问题讨论】:
标签: python python-3.x tkinter grid tk