关于为什么我不能在没有python的情况下无法将columnpan添加到此代码块的假设是应该是str而不是int的原因

问题描述 投票:0回答:1

首先,是@Bryan Oakley的大声疾呼,因为他们在这里提供了一个很好的答案:[Creating a table look-a-like Tkinter让我开始着手解决自己想做的事情。

目标:为我的无赖游戏创建一个简单的“角色表”。 (超级,简单化的基于文本的游戏),在Tkinter中使用Grid Geometry作为我的UI。

Process:我想学习如何像表格一样创建网格并将统计信息放置在每个插槽中(现在,我只是使用占位符字符串格式,以方便Bryan Oakley的早期参考。回答。]

问题:我试图修改第8、29和30行以将“ columnspan”包括在内。 Columnspan通常是一个参数,它在许多小部件中起作用,以使一个项目占据更多的“槽”。

原始代码在第8行中没有6,在第29行中具有columnpan,在第30行中没有[columnspan]。

我尝试过的一些事情

  1. 我尝试注释掉第25行中的for column in range位,以删除表的weight=1组件。这并没有留下任何明显的印象(实际上,代码完全没有它的原始状态就可以工作。)

  2. 我曾尝试更改第29行中columnspan, value部分的顺序,因为我认为可能把columnpan after值引起了问题(实际上确实引起了另一个问题。)这就是为什么我现在有columnpan before值。

  3. 我尝试在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
1个回答
0
投票

[执行widget[x]时,tkinter将其视为widget.cget(x)。您传入的是整数,并且整数不是cget的适当参数,该参数需要小部件选项的名称(背景,边框宽度等)。

© www.soinside.com 2019 - 2024. All rights reserved.