如何让 Tkinter 滚动条正确滚动按钮窗口框架,以便所有按钮都可见/可单击?可

问题描述 投票:0回答:1

我在正确查看大按钮 (643) 框架时遇到问题, 我还遇到过其他问题,例如。

  1. 学习使按钮可滚动, 我通过学习使用
    canvas.create_window
    来解决这个问题。
  2. 所述
    canvas
    窗口的内容从侧面溢出
    按钮从画布的一侧溢出 我通过将
    canvas
    包含在顶级框架而不是根窗口中来修复此问题。

但现在我对所有内容的查看和使用能力都陷入了僵局,我不想诉诸

ttk notebook
选项卡列表,因为这看起来很粗糙。

这个问题似乎是问题 2 的一个子部分,因为按钮是根据我的屏幕尺寸渲染的,而这本身似乎就困扰了一些人。

这个问题的一个较小的补充似乎是滚动条留下了大量的空间,留下大量的空间可供使用,如果我找到它,我会发布我自己的问题的答案。通常我不会问问题,但为未来的开发人员留下线索是很好的,

以下屏幕截图Tkinter window w/canvas and vsb

import tkinter as tk 
from tkinter import BOTH, BOTTOM, LEFT, RIGHT, TOP, X, Y, Button, Canvas, Frame, Tk
import matplotlib
import tkinter.ttk as ttk 
import sys
# caution: path[0] is reserved for script path (or '' in REPL)
sys.path.insert(1, "/home/will/Projects/CoinBaseADVtrade_Data")

import Data

class GUI(Tk):
    
    def __init__(self):
        super().__init__()
        
        self.top_frame = Frame(self)
        self.top_frame.pack(side=TOP, )
        self.canvas = Canvas(self.top_frame, bg="Black",width=177)
        self.frame = Frame(self.top_frame,height=20,width=400)
        self.vsb = tk.Scrollbar(self.top_frame, orient="vertical", command=self.canvas.yview)
        self.canvas.configure(yscrollcommand=self.vsb.set)
        self.vsb.pack(side=RIGHT, fill=Y)
        self.canvas.pack(side=TOP,)
        self.canvas.create_window((0,0),window=self.frame,anchor="n")

        self.frame.bind("<Configure>", lambda event, canvas=self.canvas: canvas.configure(scrollregion=canvas.bbox("all")))
        self.populate(self.frame)

    def populate(self,frame):
        products = Data.Products().list_products()
        for i in range(len(products)):
            print(products.iloc[i].name)
            Button(frame,height =5,width = 20,text=products.iloc[i].name).pack(side=TOP, padx=5,pady=3)
        pass



GUI().mainloop()


我尝试过像 Y 视图这样更好地包含画布 这两种解决方案都没有产生任何结果,并且被证明弄乱了我的代码

python tkinter window tkinter-canvas
1个回答
0
投票

编辑:回到问题背后的想法是一个可滚动窗口,我正在寻找的是这个链接https://tkdocs.com/tutorial/canvas.html#scrolling

根据之前推荐listview的评论,虽然对糟糕代码的良好升级,但我还是求助于TTK.treeview。因为我相信从最小到复杂的跳转值得完全跳转,并且出于我的目的列出视图在各个方面都会更好,

其他人可能会发现列表视图比我更有益。

© www.soinside.com 2019 - 2024. All rights reserved.