如何解决对所有 GUI 小部件应用一致的填充
我正在用 Python 构建一个更大的基于 tkinter 的 GUI,我试图保持外观,尤其是间距,在多个 list2env
之间保持一致,每个 library(stringr)
deframe(out) %>%
set_names(str_c('group',seq_along(.))) %>%
list2env(.GlobalEnv)
group1
# [,1] [,2]
#[1,] 6 0
#[2,] 0 2
group2
# [,] 2 -1
#[2,] -1 2
group3
# [,] 6.8 2.6
#[2,] 2.6 5.2
都包含多个按钮、分隔符等。
目前我正在使用递归方法来实现这一目标,大致如下:
ttk.LabelFrame
但似乎改变 ttk 样式是实现相同目标的更优雅的选择。然而,虽然这种方法适用于按钮等一些小部件:
def adjust_children(parent):
for child in parent.winfo_children():
if isinstance(child,ttk.Labelframe):
child.grid_configure(padx=10,pady=10,ipadx=5,ipady=5,sticky='senw')
adjust_children(child)
elif isinstance(child,ttk.Frame):
child.grid_configure(padx=0,pady=0,ipadx=0,ipady=0,ttk.Separator):
child.grid_configure(padx=4,pady=4)
else:
child.grid_configure(padx=2,pady=2)
以上似乎不适用于 style = ttk.Style()
style.theme_settings('default',{
'TButton':{'configure': {'padding': (2,2)}},})
。同样,我找不到太多有关使用样式更改“内部”填充(上面的TSeparator
和 ipadx
)的信息。
我是否遗漏了某些东西,或者我是否可以使用对默认 ttk 样式的更改来将填充应用于分隔符?有没有比上面显示的递归方法更好的方法?
解决方法
如果你不打算使用Style
,那么你可以用这种方式代替递归
def adjust_children (parent) :
_list=parent.winfo_children()
for item in _list:
for widget in list(attrs.keys())[:-1]:
if isinstance(item,widget):
item.grid_configure(**attrs[widget])
break
else:
item.grid_configure(**attrs['None'])
if item.winfo_children():
_list.extend(item.winfo_children())
attrs={
ttk.Labelframe: {'padx':10,'pady':10,'ipadx':5,'ipady':5,'sticky':'senw'},ttk.Frame: {'padx':0,'pady':0,'ipadx':0,'ipady':0,ttk.Separator: {'padx':4,'pady':4},'None': {'padx':2,'pady':2},}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。