【问题标题】:TKinter: Scrollable Canvas, Expandable Widgets, and PackTKinter:可滚动画布、可扩展小部件和包
【发布时间】:2015-06-02 01:11:25
【问题描述】:

我正在使用在框架内布置为网格的标签创建一个表格。我想将此框架嵌入到可滚动的画布中,并且我希望标签扩展以填充水平空间,同时保持垂直滚动能力。要查看我想要做什么,这是我的代码:

class ScrollableTable(Frame):
def __init__(self, parent, rows=4, columns=5):
    self.rows = rows
    self.columns = columns

    Frame.__init__(self, parent, borderwidth=0, background='green')
    self.canvas = Canvas(self, borderwidth=0)
    self.frame = Frame(self.canvas, borderwidth=0, background='black')  
    self.vsb = Scrollbar(parent, orient=VERTICAL, command=self.canvas.yview)    
    self.canvas.configure(yscrollcommand=self.vsb.set)            
    self.canvas.pack(side=LEFT, fill=X, expand=TRUE)      
    # This is where I fix the height I want this window to take up         
    self.canvas.configure(yscrollcommand=self.vsb.set, width=720, height=80)
    self.height = self.canvas.winfo_reqheight()
    self.width = self.canvas.winfo_reqwidth()        

    self._widgets = []        
    for row in range(rows):
        current_row = []
        for column in range(columns):
            label = Label(self.frame, text="N/A", 
                             borderwidth=0, width=5, anchor=W, justify=LEFT)
            label.grid(row=row, column=column, sticky='NESW', padx=0.5, pady=0.5)
            current_row.append(label)
        self._widgets.append(current_row)

    self.canvas.create_window((0,0), window=self.frame, anchor='w', tags=self.frame)
    self.frame.bind("<Configure>", self.OnFrameConfigure)
    self.canvas.bind("<Configure>", self.onResize)  
    #self.frame.pack(side=LEFT, fill=X, expand=True)  
    self.vsb.pack(side=RIGHT, fill=Y, expand=True)    

在上面的代码中,倒数第二行被注释掉了。当它被注释掉时,我得到一个不会扩展以填充空间的表格,但滚动条可以工作。但是,如果我取消注释这些行并使用 frame.pack 方法,表格会填充水平空间,但我会失去滚动能力。我很难理解为什么我会失去滚动能力 - 任何指针?

【问题讨论】:

    标签: python tkinter widget scrollable


    【解决方案1】:

    您需要在框架上调用pack,因此您需要手动管理框架的宽度。通常,您通过绑定到画布上的&lt;Configure&gt; 事件来执行此操作。在绑定函数中,获取画布的宽度,然后使用itemconfigure方法设置窗口对象的宽度。

    【讨论】:

      猜你喜欢
      • 2011-07-02
      • 2021-06-13
      • 2016-07-26
      • 1970-01-01
      • 1970-01-01
      • 2018-06-28
      • 2017-07-03
      • 2021-12-01
      • 1970-01-01
      相关资源
      最近更新 更多