【发布时间】:2021-04-01 03:34:49
【问题描述】:
我无法在下面的简单应用程序中正确对齐 ttk 小部件。
代码:
from tkinter import *
from tkinter import ttk
class App:
def __init__(self, root):
self.frames = []
self.entries = []
self.root = root
self.root.title("Trajectories")
self.FOPTIONS = ['A','B','C','D']
self.LSOURCE = StringVar()
self.LSOURCE.set(self.FOPTIONS[0])
self.FINDX = IntVar()
self.FLIST = ['0']
ttk.Style().configure("TFrame", padding=6, relief="flat",background="#ccc")
#F0 = ttk.Frame(self.root,padding=5)
ttk.Button(self.root,text='Import').grid(row=0,column=0,padx=5,sticky="w")
ttk.Combobox(self.root,textvariable=self.LSOURCE,values=self.FOPTIONS).grid(row=0,column=1,sticky="w")
F1 = ttk.Frame(self.root,padding=5)
# Labels row
ttk.Label(F1,text='Number').grid(row=0,column=0)
ttk.Label(F1,text='File').grid(row=0,column=1)
ttk.Label(F1,text='Alias').grid(row=0,column=2)
ttk.Label(F1,text='Crop').grid(row=0,column=3)
ttk.Label(F1,text='Show').grid(row=0,column=4)
# Fields row
ttk.Combobox(F1,textvariable=self.FINDX,values=self.FLIST,width=5).grid(row=1,column=0) # File
ttk.Entry(F1,width=50).grid(row=1,column=1,padx=3,sticky='w')
ttk.Entry(F1,width=15).grid(row=1,column=2,sticky='w') # Alias
ttk.Checkbutton(F1).grid(row=1,column=3,sticky='we') # Crops
ttk.Checkbutton(F1).grid(row=1,column=4,sticky='we') # Show
F1.grid(row=1,column=0,columnspan=2)
Button(self.root, text="Create",command=self.draw).grid(row=2,column=0,columnspan=2)
def draw(self):
print("Draw pressed")
root = Tk()
App(root)
root.mainloop()
麻烦在于:
(i) 与第一个ttk.Combobox() 和
(ii) Checkbuttons() 在“裁剪”和“显示”标签下。我尝试了很多策略,但是:
-
我无法将
ttk.Combobox()完全靠左对齐,靠近“导入”按钮。 -
Checkbuttons()没有文字,并且相对于上一行中的标签不居中。
我尝试了一些将第一行封装到框架中的变体,但没有任何变化。带有标签的第二行和带有字段的第三行被封装在一个框架中,只是为了对可变数量的附加行进行分组。使用粘性值的更改没有产生任何效果。只是我不明白在这个例子中grid() 是如何以这种方式工作的,为什么Combobox 不向左对齐(“w”)以及为什么"ew" 不在Checkbuttons() 内部居中细胞。
如果我尝试将“导入”按钮网格化为 (row=0,column=0,sticky="w") ttk.Combobox().grid(row=0,column=0,sticky="w") 正如我得到的其中一个 cmets 中所建议的那样:
【问题讨论】:
-
尝试将组合框的
grid()更改为grid(row=0,column=0)。我不太明白你所说的“Checkbuttons() are without text”是什么意思。你没有给它任何文本,那你为什么期望它显示任何文本呢? -
我的意思是没有带有参数“text”的标签
-
如果我执行 Combobox().grid(row=0,column=0) 按钮“导入”和 Combobox 出现重叠!
-
更引人注目的是,如果我改用 tk 版本,那么复选框将正确居中!!!
-
我不认为按钮和组合框会重叠,因为按钮设置在单元格的西边,另一半将被组合框占用。
标签: python tkinter ttkwidgets