首页 > 解决方案 > Tkinter 有没有办法在画布窗口中调整滚动条的大小

问题描述

我已经制作了这个窗口的大部分内容,并且希望不必重新启动,因为滚动条无法正确调整大小。问题是滚动条对于列表框来说显得太小了,我希望它们分别跨越每个框的整个高度,但到目前为止,它们只能在你向箭头发送垃圾邮件时才能起作用,因为实际的滚动位无法移动缺乏的空间。任何帮助将不胜感激,现在坚持了一段时间。(使用python 3.8)。

import tkinter as tk
from tkinter import *


setup = tk.Tk()

setup.title("Set Up Game")
setup.geometry("450x650")
setup.resizable(width=False, height=False)

select_Box = tk.Canvas(setup, width=450, height=496, bg="#cd3636")
select_Box.pack(padx=10)

listbox1 = Listbox(setup, width=33, height=30)
listbox1_win = select_Box.create_window(110,250, window=listbox1)
listbox2 = Listbox(setup, width=33, height=30)
listbox2_win = select_Box.create_window(320,250, window=listbox2)

scroll1 = Scrollbar(setup)
scroll1_win = select_Box.create_window(200,250, window=scroll1)
scroll2 = Scrollbar(setup)
scroll2_win = select_Box.create_window(410,250, window=scroll2)

listbox1.config(yscrollcommand = scroll1.set, selectmode=SINGLE)
scroll1.config(command = listbox1.yview)
listbox2.config(yscrollcommand = scroll2.set, selectmode=SINGLE)
scroll2.config(command = listbox2.yview)

nameArray = ["Bulbasaur", "Ivysaur", "Venasaur", "Charmander", "Charmelion", "Charazard", "Squirtle", "Wartortle", "Blastoise", "Lucario", "Garchomp", "Gengar", "Snorlax", "Reuniclus", "Joel","placeholder","placeholder","placeholder","placeholder","placeholder","placeholder","placeholder","placeholder","placeholder","placeholder","placeholder","placeholder","placeholder","placeholder","placeholder","placeholder","placeholder","placeholder","placeholder","placeholder","placeholder","placeholder","placeholder","placeholder","placeholder","placeholder","placeholder","placeholder","placeholder","placeholder","placeholder","placeholder","placeholder","placeholder","placeholder","placeholder","placeholder","placeholder","placeholder","placeholder","placeholder","placeholder","placeholder","placeholder","placeholder"]
for item in nameArray:
    listbox1.insert(END, item)

setup.mainloop()

标签: pythontkintercanvaslistboxscrollbar

解决方案


如果您想使用 Canvas.create_window 放置所有小部件,您所要做的就是定义滚动条的高度(您可能需要稍微调整一下数字以使其大小合适)。

因此,您的代码中的编辑片段将是:

scroll1 = Scrollbar(setup)
scroll1_win = select_Box.create_window(200,
                                       250, 
                                       height=480, # this is all you're missing!
                                       window=scroll1)

推荐阅读