gpt4 book ai didi

python - Tkinter 滚动条未正确填充或对齐

转载 作者:行者123 更新时间:2023-12-01 00:10:50 28 4
gpt4 key购买 nike

我正在尝试创建一个具有垂直和水平滚动条的框架,但水平滚动条似乎位于 Canvas 旁边,而不是在 Canvas 下方。我的滚动条包含 side=tk.BOTTOMfill=tk.X,所以我不确定还需要添加什么。我应该怎么做才能让水平滚动条延伸到整个 Canvas ?

import tkinter as tk
from tkinter import ttk

root=tk.Tk()

frame=tk.Frame(root)
frame.pack()

canvas=tk.Canvas(frame, height=200, width=200, background="blue")
canvas.pack(side=tk.LEFT)

yscrollbar=tk.Scrollbar(frame, orient=tk.VERTICAL, command=canvas.yview)
yscrollbar.pack(side=tk.RIGHT, fill=tk.Y)

xscrollbar=tk.Scrollbar(frame, orient=tk.HORIZONTAL, command=canvas.xview)
xscrollbar.pack(side=tk.BOTTOM, fill=tk.X)

canvas.configure(yscrollcommand=yscrollbar.set)
canvas.configure(xscrollcommand=xscrollbar.set)

root.mainloop()

enter image description here

现在,canvas 设置为 side=tk.LEFT。如果我将其设置为 side=tk.TOP,则会发生相反的问题。

enter image description here

最佳答案

问题来自于您打包小部件的顺序。这个想法是,pack 使用剩余的空间来放置剩余的内容,因此您需要首先打包滚动条,然后最后打包 Canvas :

import tkinter as tk
from tkinter import ttk

root=tk.Tk()

frame=tk.Frame(root)
frame.pack()

canvas=tk.Canvas(frame, height=200, width=200, background="blue")

yscrollbar=tk.Scrollbar(frame, orient=tk.VERTICAL, command=canvas.yview)


xscrollbar=tk.Scrollbar(frame, orient=tk.HORIZONTAL, command=canvas.xview)

xscrollbar.pack(side=tk.BOTTOM, fill=tk.X)
yscrollbar.pack(side=tk.RIGHT, fill=tk.Y)
canvas.pack(side=tk.LEFT)

canvas.configure(yscrollcommand=yscrollbar.set)
canvas.configure(xscrollcommand=xscrollbar.set)

root.mainloop()

scrennshot

但是,由于 pack 在涉及更复杂的 GUI 时不太直观,因此我更喜欢使用 grid:

xscrollbar.grid(row=1, column=0, sticky='ew')
yscrollbar.grid(row=0, column=1, sticky='ns')
canvas.grid(row=0, column=0, sticky='ewns')

但在这种情况下,如果您希望 GUI 正确调整大小,则需要添加

frame.columnconfigure(0, weight=1)
frame.rowconfigure(0, weight=1)

这样网格的第0行和第0列将填满所有可用空间。

关于python - Tkinter 滚动条未正确填充或对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59642378/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com