【问题标题】:Tkinter, I cannot get my slider to show all buttonsTkinter,我无法让我的滑块显示所有按钮
【发布时间】:2016-03-10 17:05:37
【问题描述】:

这是我正在做的一个示例。我在滑动画布上放了 500 个按钮,我只能滚动到 109 按钮。我做错了什么?我试过调整小部件的宽度以及滚动区域。我确定我忽略了一些简单的事情。

import Tkinter
from Tkinter import *
import os, signal

window1 = Tkinter.Tk()
window1.attributes('-fullscreen', True)
window1.bind("<Escape>", lambda e: e.widget.quit())

window2 = Tkinter.Label(window1)
window2.configure(bg = "blue")
window2.place(x=0, y=0, relwidth=1, relheight=1)

frame=Frame(window2, height=160)
frame.pack(anchor=Tkinter.SW,side=Tkinter.BOTTOM)

canvas=Canvas(frame,bg='black', width=5500, height=160, scrollregion=(0,0,5500,0))

hbar=Scrollbar(frame,orient=HORIZONTAL, bg='black', troughcolor='black')
hbar.pack(side=BOTTOM,fill=X)
hbar.config(command=canvas.xview)

canvas.config(xscrollcommand=hbar.set, xscrollincrement=4.5)
canvas.pack(side=LEFT,expand=True,fill=BOTH)
frm = Frame(canvas)
canvas.create_window(0, 0, window=frm, anchor='nw')

def quit():
    window1.quit()

count = 0
while (count < 500):
    X = Tkinter.Button(frm, text=str(count), height=6, width=5, padx=0, pady=0, highlightcolor="blue", highlightthickness=3, command=quit)
    X.pack(side = "left")
    count = count + 1

window1.mainloop()

【问题讨论】:

    标签: python button canvas tkinter scrollbar


    【解决方案1】:

    问题是您在Canvas 实例上的scrollregion 不够宽。您可以根据所有按钮的请求宽度计算它需要多宽,然后在您制作完所有按钮后设置scrollregion,如下所示:

    import Tkinter
    import os, signal
    
    window1 = Tkinter.Tk()
    window1.attributes('-fullscreen', True)
    window1.bind("<Escape>", lambda e: e.widget.quit())
    
    window2 = Tkinter.Label(window1)
    window2.configure(bg = "blue")
    window2.place(x=0, y=0, relwidth=1, relheight=1)
    
    frame = Tkinter.Frame(window2, height=160)
    frame.pack(anchor=Tkinter.SW,side=Tkinter.BOTTOM)
    
    canvas=Tkinter.Canvas(frame,bg='black', width=5500, height=160)
    
    hbar=Tkinter.Scrollbar(frame,orient=Tkinter.HORIZONTAL, bg='black', troughcolor='black')
    hbar.pack(side=Tkinter.BOTTOM,fill=Tkinter.X)
    hbar.config(command=canvas.xview)
    
    canvas.config(xscrollcommand=hbar.set, xscrollincrement=4.5)
    canvas.pack(side=Tkinter.LEFT, expand=True, fill=Tkinter.BOTH)
    frm = Tkinter.Frame(canvas)
    canvas.create_window(0, 0, window=frm, anchor='nw')
    
    def quit():
        window1.quit()
    
    count = 0
    width = 0
    while (count < 500):
        X = Tkinter.Button(frm, text=str(count), height=6, width=5, padx=0, pady=0, highlightcolor="blue", highlightthickness=3, command=quit)
        X.pack(side = "left")
        width += X.winfo_reqwidth()
        count = count + 1
    
    canvas.config(scrollregion=(0, 0, width, 0))
    window1.mainloop()
    

    附带说明,您的前两个导入语句是多余的。在此示例中,我删除了第二个以避免污染全局命名空间。

    【讨论】:

      猜你喜欢
      • 2019-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-19
      • 1970-01-01
      • 1970-01-01
      • 2021-01-31
      • 1970-01-01
      相关资源
      最近更新 更多