Tkinter UI 更改样式后自动放大

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

因此,我按照在线视频,尝试复制 UI,同时应用自己的更改来满足我的需求,但最终我得到的 UI 在每次更改主题时都会不断放大。

我尝试注释代码的某些部分,看看问题出在哪里,但无济于事,我对 Tkinter 很陌生,但在看到几个例子后我可以处理我的方式,但这个错误,我不能'不明白。

它看起来像这样: https://youtu.be/3K3HWjYSB5s

这是一个有效的代码片段:

import tkinter as tk
from tkinter import ttk


def toggle_mode():
    if mode_switch.instate(["selected"]):
        style.theme_use("forest-light")
    else:
        style.theme_use("forest-dark")


def select(event=None):
    treeview.selection_toggle(treeview.focus())
    print(treeview.selection())


root = tk.Tk()

root.title('Generator')

#root.geometry("1280x720")

style = ttk.Style(root)

root.tk.call("source", "Theme/forest-dark.tcl")

root.tk.call("source", "Theme/forest-light.tcl")

style.theme_use("forest-dark")

frame = ttk.Frame(root)

frame.pack(fill=tk.BOTH) #Expand the frame to fill the root window

widgets_frame = ttk.LabelFrame(frame, text="Title 2")

widgets_frame.grid(row=1, column=0, padx=20, pady=10)

mode_switch = ttk.Checkbutton(widgets_frame, text="Mode", style="Switch", command=toggle_mode)

mode_switch.grid(row=0, column=0, padx=5, pady=10, sticky="nsew")

separator = ttk.Separator(widgets_frame)

separator.grid(row=0, column=1, padx=(20, 0), pady=5, sticky="ew")

button = ttk.Button(widgets_frame, text="Generate")#, command=todo)

button.grid(row=0, column=2, padx=5, pady=5, sticky="nsew")

treeFrame = ttk.LabelFrame(frame, text="Title 1")

treeFrame.grid(row=0, column=0, pady=10, sticky="nsew")

treeScroll = ttk.Scrollbar(treeFrame)

treeScroll.pack(side="right", fill="y")

cols = ("1", "2", "3", "4")

treeview = ttk.Treeview(treeFrame, show=("headings"), selectmode="none", yscrollcommand=treeScroll.set, columns=cols, height=13)

treeview.bind("<ButtonRelease-1>", select)

treeview.column("1", width=100)

treeview.column("2", width=150)

treeview.column("3", width=300)

treeview.column("4", width=100)

treeview.pack()

treeview.pack_propagate(False)

treeScroll.config(command=treeview.yview)

#load_data()

root.mainloop()
python python-3.x tkinter
1个回答
0
投票

每当主题更改时,树视图列的大小似乎都会更改。您可以通过将

stretch=0
添加到这些
treeview.column(...)
来禁用这些列的大小更改:

treeview.column("1", width=100, stretch=0)
treeview.column("2", width=150, stretch=0)
treeview.column("3", width=300, stretch=0)
treeview.column("4", width=100, stretch=0)
© www.soinside.com 2019 - 2024. All rights reserved.