gpt4 book ai didi

python - Tkinter 中的可扩展和收缩框架

转载 作者:太空狗 更新时间:2023-10-29 17:30:25 26 4
gpt4 key购买 nike

有谁知道在 tkinter/ttk 中是否已经有一个小部件/类来处理基于切换按钮(checkbutton)的扩展/收缩框架?

这个问题源于我试图清理一个杂乱的 gui,它有很多按特定操作分类的选项。我想要一些类似的东西:

enter image description here
在谷歌上找到的例子

然而,不仅仅是文本,还允许按钮、条目和任何 tkinter 的小部件。如果这还不存在,创建一个继承 tkinter Frame 的类是否可能/有用:

import tkinter as tk
import ttk

class toggledFrame(tk.Frame):
def __init__(self):
self.show=tk.IntVar()
self.show.set(0)
self.toggleButton=tk.Checkbutton(self, command=self.toggle, variable=self.show)
self.toggleButton.pack()
self.subFrame=tk.Frame(self)

def toggle(self):
if bool(self.show.get()):
self.subFrame.pack()
else:
self.subFrame.forget()

注意:此代码未经测试,仅展示概念

最佳答案

我真的很惊讶我离获得功能代码有多近。我决定再做一些工作,并开发了一个简单的小类来执行我想要的(欢迎对代码提出意见和建议):

import tkinter as tk
from tkinter import ttk


class ToggledFrame(tk.Frame):

def __init__(self, parent, text="", *args, **options):
tk.Frame.__init__(self, parent, *args, **options)

self.show = tk.IntVar()
self.show.set(0)

self.title_frame = ttk.Frame(self)
self.title_frame.pack(fill="x", expand=1)

ttk.Label(self.title_frame, text=text).pack(side="left", fill="x", expand=1)

self.toggle_button = ttk.Checkbutton(self.title_frame, width=2, text='+', command=self.toggle,
variable=self.show, style='Toolbutton')
self.toggle_button.pack(side="left")

self.sub_frame = tk.Frame(self, relief="sunken", borderwidth=1)

def toggle(self):
if bool(self.show.get()):
self.sub_frame.pack(fill="x", expand=1)
self.toggle_button.configure(text='-')
else:
self.sub_frame.forget()
self.toggle_button.configure(text='+')


if __name__ == "__main__":
root = tk.Tk()

t = ToggledFrame(root, text='Rotate', relief="raised", borderwidth=1)
t.pack(fill="x", expand=1, pady=2, padx=2, anchor="n")

ttk.Label(t.sub_frame, text='Rotation [deg]:').pack(side="left", fill="x", expand=1)
ttk.Entry(t.sub_frame).pack(side="left")

t2 = ToggledFrame(root, text='Resize', relief="raised", borderwidth=1)
t2.pack(fill="x", expand=1, pady=2, padx=2, anchor="n")

for i in range(10):
ttk.Label(t2.sub_frame, text='Test' + str(i)).pack()

t3 = ToggledFrame(root, text='Fooo', relief="raised", borderwidth=1)
t3.pack(fill="x", expand=1, pady=2, padx=2, anchor="n")

for i in range(10):
ttk.Label(t3.sub_frame, text='Bar' + str(i)).pack()

root.mainloop()

此代码产生:
enter image description here

关于python - Tkinter 中的可扩展和收缩框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13141259/

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