调用外部Python文件函数时带图片的Button无法显示求助
问题分析与解决方案
你的代码里存在几个关键问题,导致带图片的按钮无法显示,下面逐一说明并给出修正后的代码:
一、代码中的错误点
TestBtnImage1.py 里的问题
- 导入错误:你写的
from TestBtnImage1 import *是导入自己的文件,应该改成从TestBtnImage2导入display函数 - 按钮触发逻辑错误:
command=display()会在程序启动时直接执行display函数,而不是点击按钮时才执行,要去掉括号写成command=display - 窗口尺寸格式错了:
geometry('200*200')里的乘号得换成小写字母x,也就是200x200
TestBtnImage2.py 里的问题
- 变量名写错:创建按钮时用了
gui,但你定义的窗口实例是frame,得改成frame - 图片被垃圾回收:
logo1是局部变量,函数执行完后会被Python回收,导致图片显示不出来,需要把图片绑定到按钮的属性上 - 多窗口创建错误:tkinter程序只能有一个主窗口(
Tk()),第二个窗口应该用Toplevel()创建,不然会有事件循环冲突 - 窗口尺寸同样格式错误:把
200*200改成200x200,另外原位置x=100,y=200超出了200x200的窗口范围,按钮会显示不全,得调整位置
二、修正后的代码
TestBtnImage1.py
from tkinter import * from TestBtnImage2 import display # 主窗口 frame = Tk() frame.title("TextBox Input") frame.geometry('200x200') frame.config(background="blue") # 按钮绑定display函数(不带括号) printButton = Button(frame, text="click me", command=display) printButton.place(x=50, y=50) frame.mainloop()
TestBtnImage2.py
from tkinter import * def display(): # 创建子窗口,用Toplevel替代Tk frame = Toplevel() frame.title("Image Button") frame.geometry('300x300') # 放大窗口避免按钮被截断 frame.config(background="blue") logo1 = PhotoImage(file="cheta.png") # 创建按钮,父窗口是frame btn = Button(frame, image=logo1, bg="blue", relief=FLAT) # 把图片绑定到按钮属性,防止被垃圾回收 btn.logo = logo1 btn.place(x=100, y=100) # 调整位置到窗口内
三、注意事项
- 确保
cheta.png和两个Python文件在同一个文件夹里,或者写完整的文件路径(比如C:/images/cheta.png) - 子窗口不用再调用
mainloop(),主窗口的mainloop()已经处理了所有事件循环
内容的提问来源于stack exchange,提问作者Dayananda BV
相关产品推荐
相关产品推荐

