吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1052|回复: 5
收起左侧

[求助] Python tkinter的灵异事件

[复制链接]
cqwcns 发表于 2021-11-16 10:51
有没有大佬玩过tkinter,我正在尝试写一个布局,其他组件都没有问题,唯独这个分割线(Separator)特别调皮,不能放到正确的行(效果见图),求大佬帮忙看看什么原因,谢谢。

[Python] 纯文本查看 复制代码
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()


微信图片_20211116104424.png

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
小文fans + 1 + 1 用心讨论,共获提升!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

小文fans 发表于 2021-11-16 11:25
加油,期待你的表现。
iokeyz 发表于 2021-11-16 11:52
本帖最后由 iokeyz 于 2021-11-16 11:54 编辑

换用 place() 硬编码位置
[Plain Text] 纯文本查看 复制代码
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.

 楼主| cqwcns 发表于 2021-11-16 12:01
iokeyz 发表于 2021-11-16 11:52
换用 place() 硬编码位置
[mw_shl_code=text,true]
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()
iokeyz 发表于 2021-11-16 12:26
cqwcns 发表于 2021-11-16 12:01
用gird不行吗?

这个例子gird是可以的。

我看了下你的代码,应该是
ttk.Separator(mainframe, orient=HORIZONTAL)
在框架中画,不是在 root 中
而且分隔符本身要占用一行的

免费评分

参与人数 1吾爱币 +2 热心值 +1 收起 理由
cqwcns + 2 + 1 谢谢@Thanks!

查看全部评分

 楼主| cqwcns 发表于 2021-11-16 14:38
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)
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 20:30

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表