【发布时间】:2016-08-22 07:07:06
【问题描述】:
谁能告诉我以下代码有什么问题?我尝试构建一个可以使用 .config 命令更改尺寸的 tkinker.listbox,但失败了。相反,它会产生“AttributeError:'MovListbox'对象没有属性'tk'”的错误代码附在下面供您参考。
非常感谢。
import tkinter
def test():
root = tkinter.Tk()
list = [' 1','2',' 3','4','5',' 6','7','8',' 9','10']
a = MovListbox(root, list)
a._setup_style(200, 200, EXTENDED)
class MovListbox(tkinter.Listbox):
def __init__(self, master=None, inputlist=None):
# super(MovListbox, self).__init__()
global NewsClassify_catList
NewsClassify_catList = tkinter.Listbox(master)
NewsClassify_catList.grid(row = 0 , column = 0, columnspan=2, sticky=N)
'''populate the news category onto the listbox'''
for i in range (0, inputlist.__len__()):
NewsClassify_catList.insert(END, inputlist[i])
master.mainloop()
def _setup_style(self, height=100, width=100, mode=EXTENDED):
self.config(height=height, width=width, selectmode=mode)
if __name__ == '__main__':
test()
【问题讨论】:
-
我对 Tkinter 不是很熟悉,但我认为您不应该使用
_setup_style方法。以下划线开头的属性通常不被视为公共 api 的一部分。另外,您是否意识到直到窗口关闭才到达a._setup_style,因为您在MovListBox构造函数中执行master.mainloop()? -
感谢 Rawing 的 cmets。将主循环放在外面的一个很好的提醒。我已经这样做了,并且还删除了 _setup_style 之前的下划线(即到 setup_style)。但是属性错误消息仍然显示。我想知道问题是否与如何告诉计算机定位要配置的列表框有关,即 self.config(height=height, width=width, selectmode=mode)) 有人有想法吗?
-
糟糕,我刚刚意识到
_setup_style是你自己的函数,而不是 Tkinter 函数。 -
我不太确定您要做什么。为什么要在您的 MovListbox 中创建另一个列表框(NewsClassify_catList)?为什么不将 MovListbox 放入根窗口?
-
@ PM 2Ring:感谢 cmets。它只是在这里提问的简化版本。实际上,列表框是更大程序的一部分。为简单起见,我将 Listbox 小部件放在另一个类中,以便在主语法中调用。由于我是 Python 的新手,所以我也在尝试编写类结构。如果有任何更简单的方法可以在类结构中编写它并解决配置问题。请告诉我。
标签: python python-3.x tkinter listbox