【Python】Tkinter使用中遇到的问题&解决方案

汇集在使用Tkinter开发时遇到的问题以及相应解决代码

好用的资源:https://tkdocs.com/tutorial/firstexample.html

0 引用库方式

import tkinter as tk
from tkinter import ttk 
from tkinter import messagebox

1 窗口设置

1.1 窗口居中、大小固定

def window_set_to_center(win, window_width, window_height):
	#得到屏幕宽度
	sw = win.winfo_screenwidth()
	#得到屏幕高度
	sh = win.winfo_screenheight()
	#窗口宽高为100
	x = (sw-window_width) / 2
	y = (sh-window_height) / 2
	win.geometry("%dx%d+%d+%d" %(window_width,window_height,x,y))
	#防止用户调整尺寸
	win.resizable(0,0) 

1.2 新建窗口、聚焦/选中新窗口

win:新建的子窗口

win=tk.Toplevel()
win.focus_force() #选中窗口
root.attributes('-disabled', True) #不可操作主窗口

 关闭子窗口、聚焦主窗口

def close_settings_window(win,root):
	win.destroy()
	root.attributes('-disabled', False)
	root.focus_force()

#关闭设置窗口,激活主窗口
win.protocol('WM_DELETE_WINDOW', lambda:close_settings_window(win,root))

2 窗口布局

grid使用colum、row判断本组件在父组件中的位置(组件创建时进行规定)

columnconfigure、rowconfigure判断所属编号colum、row占比

columnspan、rowspan为组件所占colum、row数量

sticky为组件紧贴位置

###组件位置###
	#主窗口
	mainframe.grid(column=0, row=0, sticky=tk.NSEW)
	mainframe.columnconfigure(0, weight=1)
	mainframe.columnconfigure(1, weight=1)
	mainframe.columnconfigure(2, weight=1)
	#界面1
	frame1.grid(column=0, row=0, columnspan=3, sticky=tk.NSEW)
	f1_ck1.grid(column=0, row=0, sticky=tk.NSEW)
	f1_ck2.grid(column=1, row=0, sticky=tk.NSEW)
	#界面2
	frame2.grid(column=0, row=1, columnspan=3, sticky=tk.NSEW)
	f2_rb1.grid(column=0, row=0, sticky=tk.NSEW)
	f2_rb2.grid(column=0, row=2, sticky=tk.NSEW)
	f2_rb3.grid(column=0, row=3, sticky=tk.NSEW)
	#界面3
	frame3.grid(column=0, row=2, columnspan=3, sticky=tk.NSEW)
	f3_but1.grid(column=0,row=0)
	f3_ent1.grid(column=1,row=0,padx=5)
	f3_but2.grid(column=0,row=1)
	f3_ent2.grid(column=1,row=1,padx=5)
	#按钮
	but_upload.grid(column=1,row=3,pady=10)
	but_settings.grid(column=0,row=3,pady=10)
	but_quit.grid(column=2,row=3,pady=10)

3 Tkinter变量使用

3.1 选择框

ck1=tk.IntVar()
#上传项目选项
f1_ck1=ttk.Checkbutton(frame1,text='勾选框1', variable=ck1, onvalue=1, offvalue=0)

#功能函数中获取变量值进行判断
if ck1.get()==1:
#如果被选中,执行以下code
    pass

         未选中: ck1.get()返回值为0

        选中:ck1.get()返回值为1

3.2 单选框

#单选变量
time_ck=tk.IntVar()
#默认选中第一个选项
time_ck.set(1)
#单选选项
f2_rb1=ttk.Radiobutton(frame2,text='单选1',variable=time_ck,value=1)
f2_rb2=ttk.Radiobutton(frame2,text='单选2',variable=time_ck,value=2)
f2_rb3=ttk.Radiobutton(frame2,text='单选3',variable=time_ck,value=3)

通过 set() 可以设置默认选项

3.3 文本输入

#变量
start_date=tk.StringVar()
#显示
f3_ent1=tk.Entry(frame3,textvariable=start_date)

4 icon设置

4.1 文件设置icon

win.iconphoto(False,tk.PhotoImage(file='ICON_IMG.PNG'))

4.2 编码设置icon

为了在打包时不遗漏图片文件

#编码后图片数据直接复制粘贴
ICON_IMG=b'xxxxx'
win.iconphoto(False,tk.PhotoImage(data=ICON_IMG))

图片编码:python tkinter把图标一起打包到exe中

from tkinter import *
import webbrowser
import time, datetime
import re
import base64
 
 
 
open_icon = open("qq.ico","rb") #qq.icon为你要放入的图标
b64str = base64.b64encode(open_icon.read())  #以base64的格式读出
open_icon.close()
write_data = "img=%s" % b64str
f = open("qq.py","w+")   #将上面读出的数据写入到qq.py的img数组中
f.write(write_data)
f.close() 

版权声明:此块代码摘自CSDN博主「気絿」的原创文章
原文链接:https://blog.csdn.net/vinkim/article/details/102914579

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 3.9Tkinter的运行没有明确的问题报告或更改记录。通常情况下,TkinterPython 3.9应该能够正常运行,除非你在使用Tkinter遇到了特定的问题。如果你遇到Tkinter的运行问题,我建议你检查以下几个可能的原因: 1. 安装问题:首先,确保你已经正确地安装了Python 3.9和Tkinter库。你可以通过运行`import tkinter`来验证Tkinter是否正确安装。如果出现任何错误消息,请检查你的安装过程是否正确。 2. 版本兼容性:如果你的代码是在旧版本的Python编写的,并且依赖于已被弃用或更改的功能,那么在Python 3.9可能会出现运行问题。请参考Python 3.9的官方文档和迁移指南,以了解可能会影响Tkinter的重大更改。 3. 其他依赖问题Tkinter可能依赖于其他库或组件,例如Tcl/Tk库。如果你遇到Tkinter的运行问题,也要确保你正确安装了所有相关的依赖。 4. 运行环境问题:有时,特定的操作系统或环境配置可能会影响Tkinter的运行。如果你在特定的环境遇到问题,请尝试在其他环境运行你的代码,以确定问题的来源。 综上所述,在Python 3.9Tkinter的运行通常是没有问题的。如果你遇到了特定的问题,我建议你仔细检查安装、版本兼容性、依赖和运行环境,以确定问题的根本原因。如果问题仍然存在,你可以在相关的开发者社区或论坛寻求帮助,以获得更具体的解决方案

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值