簡體   English   中英

tkinter:滾動條自動隱藏,無需調整窗口大小

[英]tkinter: scrollbar autohide without window resize

使用我寫的以下示例代碼,我在某些行為上遇到了問題。 我想根據需要添加/刪除滾動條。 但是,當我這樣做時,它會隨着窗口大小的變化而移動窗口中的所有其他元素。 這只是一個演示問題的示例,添加和刪除滾動條時,您將看到窗口調整大小。 在實際的應用程序中,窗口上有更多小部件。

我是否要嘗試以正確的方式執行此操作,否則,如何解決該問題? 我還計划在另一個單獨的框架中使用第二個帶有滾動條的小部件。

from tkinter import *
from tkinter import ttk

class TopFrame(ttk.Frame):
    def __init__(self, parent, col=0, row=0):
        ttk.Frame.__init__(self, parent)
        self.innerframe = ttk.Frame(parent)

        self.list_scroll = ttk.Scrollbar(self.innerframe)
        self.list_scroll.grid(column=1, row=0, sticky=NS)
        self.list_scroll.grid_remove()

        self.list = Listbox(self.innerframe, width=64, height=8,
                            yscrollcommand=self.list_scroll.set)
        self.list_scroll.config(command=self.list.yview)
        self.list.grid(column=0, row=0, sticky=NSEW)

        self.innerframe.grid(column=col, row=row)

        self.addbtn = ttk.Button(parent, text='add item',
                                 command=self.additem)
        self.addbtn.grid(column=col, row=row+1, padx=10, pady=2)
        self.delbtn = ttk.Button(parent, text='del item',
                                 command=self.delitem)
        self.delbtn.grid(column=col, row=row+2, padx=10, pady=2)

        self.grid_rowconfigure(0, weight=1)
        self.grid_columnconfigure(0, weight=1)

    def additem(self):
        count = str(len(self.list.get(0, END)))
        self.list.insert(END, 'demo' + count)
        if len(self.list.get(0, END)) > 8:
            self.list_scroll.grid()

    def delitem(self):
        self.list.delete(END)
        if len(self.list.get(0, END)) <= 8:
            self.list_scroll.grid_remove()

class MasterFrame(Tk):
    def __init__(self):
        Tk.__init__(self)
        topframe = TopFrame(self)

if __name__ == '__main__':
    MasterFrame().mainloop()

第一次顯示窗口后,您可以獲取窗口大小,然后使用該大小在根窗口上調用geometry方法。 當您使用geometry命令設置窗口的大小時,它將基於其內部小部件的更改而停止調整大小。

最簡單的事情是編寫一個函數來執行此操作,並安排它與after_idle一起運行,該after_idle應在首次顯示窗口后觸發。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM