tkinter初步使用

背景

本来想用pyqt的,但是打包成exe的时候遇到了很多坑,各种报错,从而转tkinter了。
tkinter打包很简单,不易报错,打包成exe后能独立运行于没装环境的电脑。

代码

此代码为官方文档的样例,可以基于此代码扩展。对布局要求不高,一般用网格布局即可

  • 如果引用了图片文件,打包以后会报错。可以将图片转为base64变量写在代码里
from tkinter import *
from tkinter import ttk

class FeetToMeters:

    def __init__(self, root):

        root.title("Feet to Meters")

        mainframe = ttk.Frame(root, padding="3 3 12 12")
        mainframe.grid(column=0, row=0, sticky=(N, W, E, S))
        root.columnconfigure(0, weight=1)
        root.rowconfigure(0, weight=1)

        self.feet = StringVar()
        feet_entry = ttk.Entry(mainframe, width=7, textvariable=self.feet)
        feet_entry.grid(column=2, row=1,columnspan=1 sticky=(W, E))
        self.meters = StringVar()

        ttk.Label(mainframe, textvariable=self.meters).grid(column=2, row=2, sticky=(W, E))
        ttk.Button(mainframe, text="Calculate", command=self.calculate).grid(column=3, row=3, sticky=W)

        ttk.Label(mainframe, text="feet").grid(column=3, row=1, sticky=W)
        ttk.Label(mainframe, text="is equivalent to").grid(column=1, row=2, sticky=E)
        ttk.Label(mainframe, text="meters").grid(column=3, row=2, sticky=W)

        for child in mainframe.winfo_children():
            child.grid_configure(padx=5, pady=5)

        feet_entry.focus()
        root.bind("<Return>", self.calculate)

    def calculate(self, *args):
        try:
            value = float(self.feet.get())
            self.meters.set(int(0.3048 * value * 10000.0 + 0.5) / 10000.0)
        except ValueError:
            pass
#打开文件弹窗
#self.open_file_path = askopenfilename(title="请选择一个要打开的html文件", filetypes=[("html", "*.html")])
#self.fileName.set(self.open_file_path.split('/')[-1])
#提示弹窗
#tkinter.messagebox.showinfo('提示', '成功搞定')

root = Tk()
FeetToMeters(root)
root.mainloop()

  • 以下代码是部分常用的操作
    def readFile(self,fileName):
		
        file = open(fileName, 'rb')
        msg = file.read()
        result = chardet.detect(msg)
        print(result)
        context = msg.decode(result['encoding'], 'strict')
        print(type(context))
        print(context)
        modified = context.replace('</body>', code)
        modified = modified.replace('</head>', code1)
        # file = open(fileName, 'w', encoding="utf-8")
        file = open(fileName, 'w', encoding=result['encoding'])
        file.write(modified)
        file.close()
        tkinter.messagebox.showinfo('提示', '成功搞定')
	#遍历文件
    def getFile(self,filePath):
        files = os.listdir(filePath)
        for file in files:
            file_d = os.path.join(filePath, file)
            if os.path.isdir(file_d):
                self.getFile(file_d)
            else:
                if '.html' in file_d:
                    print(file_d)
                    self.readFile(file_d)

打包

pip install PyInstaller
pyinstaller -F -i XXX.ico -w XXX.py
#-D :生成文件夹 -F生成一个EXE
上一篇:【Python】tkinter版的用户登录管理


下一篇:tkinter 让按钮居中显示