2013-07-31 87 views
0

我在python3/tkinter中编写了一个小GUI。我想要做的是生成一个包含数据表的窗口(如电子表格),并让表格可以水平和垂直滚动。现在我只是试图显示数据,所以我使用了一个标签网格。数据显示工作正常,但我不能让滚动条正确行事。这是我的代码的相关部分;类,这是在继承tk.Toplevel在tkinter中使用滚动条显示表格

frame = self.frame = tk.Frame(self) 
self.frame.grid(row=1, columnspan=2, padx=2, pady=2, sticky=tk.N+tk.E+tk.S+tk.W) 

self.text_area = tk.Canvas(self.frame, background="black", width=400, height=500, scrollregion=(0,0,1200,800)) 
self.hscroll = tk.Scrollbar(self.frame, orient=tk.HORIZONTAL, command=self.text_area.xview) 
self.vscroll = tk.Scrollbar(self.frame, orient=tk.VERTICAL, command=self.text_area.yview) 
self.text_area['xscrollcommand'] = self.hscroll.set 
self.text_area['yscrollcommand'] = self.vscroll.set 

self.text_area.grid(row=0, column=0, sticky=tk.N+tk.S+tk.E+tk.W) 
self.hscroll.grid(row=1, column=0, sticky=tk.E+tk.W) 
self.vscroll.grid(row=0, column=1, sticky=tk.N+tk.S) 

self._widgets = [] 

for row in range(rows): 
    current_row = [] 
    for column in range(columns): 
     label = tk.Label(self.text_area, text="", 
         borderwidth=0, width=width) 
     label.grid(row=row, column=column, sticky="nsew", padx=1, pady=1) 
     current_row.append(label) 
    self._widgets.append(current_row) 

表显示OK和滚动条出现,但不起作用: enter image description here

任何想法?

回答

1

你有几个问题。首先,您不能使用grid在画布中放置标签并期望它们滚动。当您滚动画布时,只有添加了create_window的小部件才会滚动。但是,可以使用网格将标签放入框架中,然后使用create_window将框架添加到画布。该网站上有几种这种技术的例子。其次,您需要告诉画布画布中的多少数据应该可滚动。您可以通过设置画布的scrollregion属性来使用它。有一种方法,bbox可以给你一个画布中所有数据的边界框。通常它是这样使用的:

canvas.configure(scrollregion=canvas.bbox("all")) 
+0

谢谢,这很有帮助 –