Python tkinter的灵异事件
有没有大佬玩过tkinter,我正在尝试写一个布局,其他组件都没有问题,唯独这个分割线(Separator)特别调皮,不能放到正确的行(效果见图),求大佬帮忙看看什么原因,谢谢。from tkinter import *
from tkinter import ttk
class tanZhen:
def __init__(self, root):
# 窗口属性
root.title("探针数据处理")
ww = 800
wh = 600
sw = root.winfo_screenwidth()
sh = root.winfo_screenheight()
# 计算窗口位置
x = (sw-ww) / 2
y = (sh-wh) / 2
root.geometry("%dx%d+%d+%d" % (ww, wh, x, y))
# 创建组件
mainframe = ttk.Frame(root, padding="50 30")
# 渲染组件
mainframe.grid(column=0, row=0, sticky=(N, W, E, S))
# 响应式布局
root.columnconfigure(0, weight=1)
root.rowconfigure(0, weight=1)
# 选择文件标签
label_select_file = ttk.Label(mainframe, text="选择文件")
label_select_file.grid(row=0, column=0, sticky=W, pady=10)
label_select_file.config(font=("宋体", 12, "bold"))
# 探针标签框
ttk.Label(mainframe, text="探针表").grid(row=1, column=0, sticky=W)
# 探针输入框
self.entry_tanzhen = StringVar()
entry_tanzhen = ttk.Entry(mainframe, textvariable=self.entry_tanzhen)
entry_tanzhen.grid(row=1, column=1, sticky=(W, E), padx=10, pady=10)
# 响应式布局
mainframe.columnconfigure(1, weight=1)
# 探针选择按钮
btn_tanzhen = ttk.Button(mainframe, text='选择', command='')
btn_tanzhen.grid(row=1, column=2)
# 全量资源标签框
ttk.Label(mainframe, text="全量资源表").grid(row=2, column=0, sticky=W)
# 全量资源输入框
self.entry_ziyuan = StringVar()
entry_ziyuan = ttk.Entry(mainframe, textvariable=self.entry_ziyuan)
entry_ziyuan.grid(row=2, column=1, sticky=(W, E), padx=10, pady=10)
# 响应式布局
mainframe.columnconfigure(1, weight=1)
# 全量资源选择按钮
btn_tanzhen = ttk.Button(mainframe, text='选择', command='')
btn_tanzhen.grid(row=2, column=2)
# 用户班表标签框
ttk.Label(mainframe, text="用户班表").grid(row=3, column=0, sticky=W)
# 用户班输入框
self.entry_yonghuban = StringVar()
entry_yonghuban = ttk.Entry(
mainframe, textvariable=self.entry_yonghuban)
entry_yonghuban.grid(row=3, column=1, sticky=(W, E), padx=10, pady=10)
# 响应式布局
mainframe.columnconfigure(1, weight=1)
# 用户班选择按钮
btn_tanzhen = ttk.Button(mainframe, text='选择', command='')
btn_tanzhen.grid(row=3, column=2)
# 分隔线
ttk.Separator(root, orient=HORIZONTAL).grid(
row=4, sticky='W,E', padx=50)
# 处理数据标签
label_work_with_data = ttk.Label(mainframe, text="处理数据")
label_work_with_data.grid(row=5, column=0, sticky=W, pady=10)
label_work_with_data.config(font=("宋体", 12, "bold"))
# 处理数据操作标签
ttk.Label(mainframe, text="处理数据").grid(row=6, column=0, sticky=W)
# 处理数据按钮
btn_work_with_data = ttk.Button(mainframe, text='开始处理数据', command='')
btn_work_with_data.grid(row=6, column=2)
# 分隔线
ttk.Separator(root, orient=HORIZONTAL).grid(
row=7, sticky='W,E', padx=50)
# 处理结果标签
label_work_with_data = ttk.Label(mainframe, text="处理结果")
label_work_with_data.grid(row=8, column=0, sticky=W, pady=10)
label_work_with_data.config(font=("宋体", 12, "bold"))
root = Tk()
tanZhen(root)
root.mainloop()
加油,期待你的表现。 本帖最后由 iokeyz 于 2021-11-16 11:54 编辑
换用 place() 硬编码位置
widget.place( place_options )
anchor: The exact spot of widget other options refer to: may be N, E, S, W, NE, NW, SE, or SW, compass directions indicating the corners and sides of widget; default is NW (the upper left corner of widget)
bordermode: INSIDE (the default) to indicate that other options refer to the parent's inside (ignoring the parent's border); OUTSIDE otherwise.
height, width: Height and width in pixels.
relheight, relwidth: Height and width as a float between 0.0 and 1.0, as a fraction of the height and width of the parent widget.
relx, rely: Horizontal and vertical offset as a float between 0.0 and 1.0, as a fraction of the height and width of the parent widget.
x, y: Horizontal and vertical offset in pixels.
iokeyz 发表于 2021-11-16 11:52
换用 place() 硬编码位置
widget.place( place_options )
用gird不行吗?
这个例子gird是可以的。
from tkinter import *
from tkinter import ttk
root=Tk()
s=ttk.Style()
s.configure('red.TSeparator',background='red')
root.geometry('320x240')
sep=ttk.Separator(root,orient='horizontal', style='red.TSeparator')
Label(root, text="ALARM TEXT_1").grid(row=0, column=0, sticky='EW', pady=5, padx=5)
Label(root, text="ALARM TEXT_2").grid(row=0, column=1, sticky='EW', pady=5, padx=5)
sep.grid(row=1,column=0,rowspan=1, columnspan=2, sticky='EW', pady=5, padx=5)
Label(root, text="ALARM TEXT_3").grid(row=2, column=0, sticky='EW', pady=5, padx=5)
Label(root, text="ALARM TEXT_4").grid(row=2, column=1, sticky='EW', pady=5, padx=5)
root.mainloop() cqwcns 发表于 2021-11-16 12:01
用gird不行吗?
这个例子gird是可以的。
我看了下你的代码,应该是
ttk.Separator(mainframe, orient=HORIZONTAL)
在框架中画,不是在 root 中
而且分隔符本身要占用一行的 iokeyz 发表于 2021-11-16 12:26
我看了下你的代码,应该是
ttk.Separator(mainframe, orient=HORIZONTAL)
在框架中画,不是在 root 中
...
正解,又犯了一个低级错误,谢谢。
ttk.Separator(mainframe, orient=HORIZONTAL).grid(
row=4, columnspan=3, sticky='W,E', pady=10)
页:
[1]