如何使用tkinter在条目列表上实现滚动条?

2024-05-19 02:09:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用Python3中的tkinter创建一个可滚动的条目列表。它确实很棒,对标签也很好,但对条目似乎不起作用。你可以在这里找到我的代码,它创建了一个2x25的条目列表,我想通过它可以滚动:

import tkinter as tk


class MainPage(tk.Frame):
    def __init__(self, racine):
        super().__init__(master=racine)
        self.grid()

        self.entriesCanvas = tk.Canvas(self, borderwidth=0, background="white")
        self.entriesFrame = tk.Frame(self.entriesCanvas, background="white")
        self.scrollbar = tk.Scrollbar(self, command=self.entriesCanvas.yview)
        self.entriesCanvas.configure(yscrollcommand=self.scrollbar.set)

        self.entriesCanvas.grid(column=0, row=2, columnspan=2)
        self.scrollbar.grid(column=3, row=2, sticky='ns')

        # self.entriesFrame.grid()
        self.entriesCanvas.create_window((0, 0), window=self.entriesFrame,
                                         anchor='nw', tags='self.entriesFrame')
        # self.entriesFrame.grid()

        self.entriesCanvas.bind('<Configure>', self.onFrameConfigure)

        self.entries = []
        for i in range(50):
            self.entries.append(tk.Entry(self.entriesFrame, font=('arial', 30)))
            self.entries[i].grid(column=i % 2, row=i//2)

    def onFrameConfigure(self, event):
        self.entriesCanvas.configure(scrollregion=self.entriesCanvas.bbox("all"))


if __name__ == "__main__":
    root = tk.Tk()
    mainPage = MainPage(root)
    root.mainloop()

注意我注释了两行。如果你“激活”第一行,会有一个滚动条,你可以滚动条目,但它奇怪的缩放。另一方面,如果你“激活”第二行,GUI将如我所愿,但不可能滚动,它似乎显示所有条目(即使有1000个条目,因此使一个窗口的大小是你的屏幕的20倍)

你知道我的错在哪里吗


Tags: self列表tkinter条目columnrootframetk
1条回答
网友
1楼 · 发布于 2024-05-19 02:09:37

好吧,所以我找到了让我的程序做我想做的事情的方法。我只是改变了方法

def onFrameConfigure(self, event):
    self.entriesCanvas.configure(scrollregion=self.entriesCanvas.bbox("all"))

def onFrameConfigure(self, event):
    self.entriesCanvas.configure(scrollregion=self.entriesCanvas.bbox("all"), width=self.entriesFrame.winfo_width())

(我基本上只添加了一个参数,要求画布是帧的宽度。) 我不知道它是否完美(因为我仍然使用.grid()代替.pack()),但它是有效的

谢谢你给了我来源Tkinter: How to get frame in canvas window to expand to the size of the canvas?,它真的帮助我找到了我的错误所在

我真的为我的英语道歉,我知道我犯了很多错误

相关问题 更多 >

    热门问题