tkinter 让控件在屏幕居中、在父窗口居中

在屏幕居中

# 窗体显示在屏幕中央
def set_in_screen_center(tk_widget,winWidth=None,winHeight=None):
    """
    :param tk_widget: 部件,如果传入的是根窗口,必须指定长宽,要不只显示标题栏
    :param winWidth: 指定显示宽度
    :param winHeight: 指定显示长度
    :return:
    """
    # 获取根窗口
    root = tk_widget
    temp_root = None
    while 1:
        temp_root = root.master
        if temp_root is None:
            break
        root = temp_root
    # 获取屏幕分辨率
    screenWidth = root.winfo_screenwidth()
    screenHeight = root.winfo_screenheight()

    root.update()
    if winWidth is None:winWidth=tk_widget.winfo_width()
    if winHeight is None:winHeight=tk_widget.winfo_height()

    x = int((screenWidth - winWidth) / 2)
    y = int((screenHeight - winHeight) / 2)

    # 设置窗口初始位置在屏幕居中
    tk_widget.geometry("%sx%s+%s+%s" % (winWidth, winHeight, x, y))

在父窗口居中

# 显示在窗口中间
def set_in_windows_center(tk_widget,winWidth=None,winHeight=None):
    """
        :param tk_widget: 部件,不能传入根窗口
        :param winWidth: 指定显示宽度
        :param winHeight: 指定显示长度
        :return:
        """
    # 获取根窗口
    root = tk_widget
    temp_root = None
    while 1:
        temp_root = root.master
        if temp_root is None:
            break
        root = temp_root

    root.update()

    # 获取根窗口大小
    r_width = root.winfo_width()
    r_height = root.winfo_height()


    # 获取根窗口x,y
    r_x = root.winfo_rootx()
    r_y = root.winfo_rooty()

    if winWidth is None: winWidth = tk_widget.winfo_width()
    if winHeight is None: winHeight = tk_widget.winfo_height()

    print(f"根x:{r_x},根y:{r_y},根宽:{r_width},根长;{r_height}")

    if r_width > winWidth:
        x = int((r_x + (r_width - winWidth) / 2))
    else:
        x = r_x

    if r_height > winHeight:
        y = int((r_y + (r_height - winHeight) / 2))
    else:
        y = r_y
    # 设置窗口初始位置在指定窗口中间
    tk_widget.geometry("%sx%s+%s+%s" % (winWidth, winHeight, x, y))
    # tk_widget.geometry("%sx%s+%s+%s" % (winWidth, winHeight, 400, 400))
    print(f"窗x:{x},窗y:{y},窗宽:{winWidth},窗长:{winHeight}")

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值