使用python自带的tkinter库开发图形界面

虽说使用pyqt5开发图形界面更美观,更高效,但想要开发轻量级的小工具,pyqt5不免太过庞大,这时tkinter就派上用场了。

一、一个简单的tkinter模板

import tkinter as tk
from PIL import Image, ImageTk

class AppUI():
    def __init__(self):
        self.root = tk.Tk()
        self.x = 0
        self.y = 0
        self.init_ui()

    def init_ui(self):
        #self.root.overrideredirect(True) #去除边框
        #self.root.attributes("-alpha", 0) #整个窗口透明
        #self.root.iconbitmap('favicon.ico')  #设置窗口图标
        #self.root.attributes("-transparentcolor", "#CDCDB4")   # 将指定颜色变成透明颜色
        #self.root.wm_attributes('-topmost',1) #窗口置顶

        self.root.title("test")
        self.root.resizable(False, False) # 此调用方法会禁止根窗体改变大小

        scnWidth, scnHeight = self.root.maxsize() #获取屏幕的大小
        x, y = (scnWidth-1000)/2, (scnHeight-648)/2 #定位窗口居中显示的坐标

        self.root.geometry("1000x648+%d+%d" % (x,y)) #大小为1000x648,位置在(x,y)的主窗口

        self.canvas = tk.Canvas(self.root, width = 1000,height = 648)

        #bg = tk.PhotoImage(file='img.gif') #只支持gif格式
        bdgd = Image.open('imgs/bg.png')
        bg = ImageTk.PhotoImage(bdgd)
        self.canvas.create_image(500,324,image=bg)
        self.canvas.configure(highlightthickness = 0)
        self.canvas.bind("<B1-Motion>",self.move)
        self.canvas.bind("<Button-1>",self.button_1)

        self.canvas.pack()
        self.root.mainloop()

    def move(self, event):
        
        new_x = (event.x-self.x)+self.root.winfo_x()
        new_y = (event.y-self.y)+self.root.winfo_y()
        s = "1000x648+" + str(new_x)+"+" + str(new_y)
        self.root.geometry(s)
        
    def button_1(self, event):
        
        self.x, self.y = event.x,event.y

if __name__=='__main__':

    AppUI()

    1. 去除边框

self.root.overrideredirect(True)

该方法设置覆盖重定向标志,这将删除窗口中的所有窗口管理器的装饰,使其无法移动,调整大小,图标化或关闭。

(此方法需谨慎使用,使用后没有任务图标了)

    2. 窗口拖动的实现

因为去除边框,窗口无法移动,所以需自己实现窗口的拖动 ;

这里是用两个鼠标事件实现的:

    self.canvas.bind("<B1-Motion>",self.move)
                self.canvas.bind("<Button-1>",self.button_1)

这其中的"<B1-Motion>"是鼠标左键点击移动事件,"<Button-1>"是左键单击事件

    3. 画布canvas 添加背景图片

如果是gif图片,可直接调用 tk.PhotoImage(file='img.gif')

其他格式的图片,需调用PIL库,该库的安装(pip install pillow),怎么使用具体看上面实例

然后再create_image(500,324,image=bg),这其中的500x324是1000x648的一半,正好是画布的中心点

 

二、使用pyinstaller打包exe时,图片资源的导入 

    1. pip install pyinstaller

    2. 使用base64将图片资源编码到一个py文件中

import base64
import os
 
def pic2py(picture_name):
    open_pic = open("imgs/%s" % picture_name, 'rb')
    b64str = base64.b64encode(open_pic.read())
    open_pic.close()
    
    # 注意这边b64str一定要加上.decode()
    write_data = '%s = "%s"\n' % (picture_name.replace('.', '_'), b64str.decode())
    f = open('imgs_rc.py', 'a+')
    f.write(write_data)
    f.close()
 
if __name__ == '__main__':
    dir = 'imgs'  #存放图片资源的文件夹
    for img in os.listdir(dir):
        pic2py(img)

    3. imgs_rc.py的使用

头部导入要使用到的文件及库

         import io, base64

         from imgs_rc import *

将下面圈出来的改成右边的,就大功告成了。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值