You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用外部Python文件函数时带图片的Button无法显示求助

问题分析与解决方案

你的代码里存在几个关键问题,导致带图片的按钮无法显示,下面逐一说明并给出修正后的代码:

一、代码中的错误点

TestBtnImage1.py 里的问题

  1. 导入错误:你写的from TestBtnImage1 import *是导入自己的文件,应该改成从TestBtnImage2导入display函数
  2. 按钮触发逻辑错误:command=display()会在程序启动时直接执行display函数,而不是点击按钮时才执行,要去掉括号写成command=display
  3. 窗口尺寸格式错了:geometry('200*200')里的乘号得换成小写字母x,也就是200x200

TestBtnImage2.py 里的问题

  1. 变量名写错:创建按钮时用了gui,但你定义的窗口实例是frame,得改成frame
  2. 图片被垃圾回收:logo1是局部变量,函数执行完后会被Python回收,导致图片显示不出来,需要把图片绑定到按钮的属性上
  3. 多窗口创建错误:tkinter程序只能有一个主窗口(Tk()),第二个窗口应该用Toplevel()创建,不然会有事件循环冲突
  4. 窗口尺寸同样格式错误:把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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 13:15:17