首先,我想开始。我是Python的新手,在发布问题之前,我已经通过之前的各种帖子进行了广泛的研究和反复试验。
理想情况下,我试图创建一个带有标签的小型tkinter框架,该标签定义了框架细节和三个按钮。按钮和标签工作,放置顺利。当我尝试在按钮中添加一个Icon时,它会抛出我并出现错误。
到目前为止这是脚本:
import tkinter
from tkinter import *
def doNothing():
print("doNothing")
icon1=PhotoImage(file="icon1.png")
icon2=PhotoImage(file="icon2.png")
icon3=PhotoImage(file="icon3.png")
W=tkinter.Tk()
W.geometry("325x300+0+0")
W.configure(bg="gray10")
FRAME1=Frame(W, width=100, height =100)
FRAME1.place(x=0,y=0)
LABEL1=Label(FRAME1,relief=FLAT, text="Profile",font="Verdana 10 bold",width=25, height =1).grid(row=0, column=0)
Button1= Button(FRAME1,relief=FLAT, width=3, height =1,command=doNothing).grid(row=0, column=1)
Button1.config(image=icon1)
Button1.pack()
Button2= Button(FRAME1,relief=FLAT, width=3, height =1,command=doNothing).grid(row=0, column=2)
Button2.config(image=icon2)
Button2.pack()
Button3= Button(FRAME1,relief=FLAT, width=3, height =1,command=doNothing).grid(row=0, column=3)
Button3.config(image=icon3)
Button3.pack()
W.mainloop()
当我运行此脚本时,我得到以下输出。
Traceback (most recent call last):
File "C:/Users/ADRIA/PycharmProjects/LATAM/TESTING CODE.py", line 7, in <module>
icon1=PhotoImage(file="icon1.png")
File "C:\Users\ADRIA\AppData\Local\Programs\Python\Python35\lib\tkinter\__init__.py", line 3394, in __init__
Image.__init__(self, 'photo', name, cnf, master, **kw)
File "C:\Users\ADRIA\AppData\Local\Programs\Python\Python35\lib\tkinter\__init__.py", line 3335, in __init__
raise RuntimeError('Too early to create image')
RuntimeError: Too early to create image
任何帮助清除这一点都会令人惊讶。
干杯,
答案 0 :(得分:1)
问题是您在创建PhotoImage
实例之前尝试创建Tk
。这是错误试图用Too early to create image
告诉你的。
只需切换它:
icon1=PhotoImage(file="icon1.png")
icon2=PhotoImage(file="icon2.png")
icon3=PhotoImage(file="icon3.png")
W=tkinter.Tk()
所以tkinter.Tk()
首先是这样的:
W=tkinter.Tk()
icon1=PhotoImage(file="icon1.png")
icon2=PhotoImage(file="icon2.png")
icon3=PhotoImage(file="icon3.png")
您遇到的另一个问题是因为您指定Button1
,如下所示:
Button1= Button(FRAME1,relief=FLAT, width=3, height =1,command=doNothing).grid(row=0, column=1)
您并未将Button
个实例分配给Button1
您实际为其分配.grid(row=0, column=1)
的返回值。
您需要做的是改变:
Button1= Button(FRAME1,relief=FLAT, width=3, height =1,command=doNothing).grid(row=0, column=1)
Button1.config(image=icon1)
分为:
Button1= Button(FRAME1,relief=FLAT, width=3, height =1,command=doNothing)
Button1.grid(row=0, column=1)
Button1.config(image=icon1)
您还必须执行此操作,但Button2
和Button3
。
警告:切勿在同一主窗口中混合网格和打包。 Tkinter很乐意度过余生,试图协商一个管理人员都满意的解决方案。而不是等待,杀死应用程序,再看看你的代码。一个常见的错误是对某些小部件使用了错误的父级。
因此,如果您想使用Button*.grid()
,则必须删除Button.pack()
来电。