【一】创建Python TK GUI窗口,并简单设置窗口

2024-01-10 10:27:16

背景

?????????这是一个系列文章。
?????????使用python脚本写一个小工具。因为命令行运行的使用会有dos窗口,交互也不是很方便,开发环境运行也不方便分享给别人用,所以想到使用一个简单、易学、好上手的GUI工具给包装一下,达到一个直观、易用的目的,也可以打包分享给别人。

系统环境

  • python 3.0
  • 开发环境windows 11,最低打包运行环境windows 10
  • 开发工具PyCharm

开始一个简单GUI

启动一个GUI窗口(不完成功能)

main_tk.py

# -*- coding: UTF-8 -*-

from tkinter import Tk # pip3 install tkinter

"""
首行配置输出中文乱码
引入tk依赖:最好使用from的方式引入,避免后续打包的时候会加入很多无用的包,造成运行文件过大
"""


class MainTk:

    def __init__(self, root: Tk):
        super().__init__()


if '__main__' == __name__:
    tk = Tk()
    main_tk = MainTk(root=tk)

    # 启动窗口
    tk.mainloop()

简单配置GUI窗口(大小、位置、图标)

main_tk.py

# -*- coding: UTF-8 -*-

from tkinter import Tk
from tkinter.messagebox import askyesno
from threading import Thread
from sys import exit

"""
首行配置输出中文乱码
最好使用from的方式引入,避免后续打包的时候会加入很多无用的包,造成运行文件过大
"""


class MainTk:
    """MainTk: 主窗口配置对象"""

    _root = None
    """私有成员变量,不能通过对象点的方式获得,必须通过get方式获取"""

    _thread = None
    """线程对象"""

    def __init__(self, root: Tk):
        self._root = root
        """设置窗口大小和位置"""
        width = 700  # 窗口宽度
        height = 500  # 窗口高度
        position_x = 300  # 窗口距离屏幕左边的水平距离
        position_y = 100  # 窗口距离屏幕右边的水平距离
        geometry = str(width) + 'x' + str(height) + '+' + str(position_x) + '+' + str(position_y)
        self._root.geometry(geometry)

        """设置窗口标题"""
        self._root.title('Tools')

        """设置窗口图标"""
        self._root.iconbitmap('logo.ico')

        """点击右上角关闭窗口的监听"""
        self._root.protocol("WM_DELETE_WINDOW", lambda: self.thread_it(self.close_app()))

    def thread_it(self, func, *args):
        self._thread = Thread(target=func, args=args, daemon=True)
        self._thread.start()

    def close_app(self):
        ans = askyesno(title='提示', message='是否确定退出程序?')
        if ans:
            # 销毁窗口
            self._root.destroy()
            exit()
        else:
            return None

# 程序入口
if '__main__' == __name__:
    tk = Tk()
    main_tk = MainTk(root=tk)

    # 启动窗口
    tk.mainloop()

运行示例

image.png
image.png

文章来源:https://blog.csdn.net/dongzi_yu/article/details/135495641
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。