首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python -带有标签和照片的Tkinter

Python -带有标签和照片的Tkinter
EN

Stack Overflow用户
提问于 2014-03-30 18:49:09
回答 2查看 140关注 0票数 0

我正在制作一个程序,给你提供关于行星/恒星的信息和图片。我正在用tkinter这样做。

下面是问题所在的代码:

代码语言:javascript
复制
sunPic = r'sun.gif'
mercPic = r'merc.gif'


buttonFrame = Frame(root)
buttonFrame.pack(side=LEFT)

textFrame = Frame(root)
textFrame.pack(side=TOP)


def sunInfo():

    sunImage = PhotoImage(file=sunPic)
    img1 = Label(textFrame, image = sunImage)
    img1.image = sunImage
    img1.pack()


def mercInfo():

    mercImage = PhotoImage(file=mercPic)
    img1.configure(image = mercImage)
    img1.image = mercImage
    img1.pack()

sun = Button(buttonFrame, text="THE SUN",command=sunInfo)
sun.pack(side=TOP)

mercury = Button(buttonFrame, text="MERCURY",command=mercInfo)
mercury.pack(side=TOP)

当你按下一个按钮,它应该改变图像。所以,如果我按下太阳按钮,太阳的照片就会出现,然后我按下水星按钮,一张水星的图片会取代太阳的照片。

然而,这是行不通的。当我单击水银按钮时,会出现以下错误:

代码语言:javascript
复制
img1.configure(image = mercImage)
NameError: global name 'img1' is not defined

另外,如果我按了几次太阳按钮,几张太阳的图片就会出现!我不想这样。

我在这个节目中想做的是:

  • 创建行星名称的按钮。
  • 允许用户按下这些按钮。
  • 在那个星球上出现了一张照片和一些信息
  • 如果用户按下另一个按钮,图片和信息将被新行星的信息和图片所取代。

这是我今晚要完成的一个项目。我没什么经验,我需要帮助。

谢谢。

此外:

下面是我正在编写的完整代码:

代码语言:javascript
复制
from tkinter import *

root = Tk()



root.geometry('1024x768+200+200') # makes window (x,y+top left corner right + top left corner down)
root.title("Planetary Information") # creates title for window

sunPic = r'sun.gif'
mercPic = r'merc.gif'


buttonFrame = Frame(root)
buttonFrame.pack(side=LEFT)

textFrame = Frame(root)
textFrame.pack(side=TOP)


def sunInfo():

    sunImage = PhotoImage(file=sunPic)
    img1 = Label(textFrame)
    img1.configure(image = sunImage)
    img1.image = sunImage
    img1.pack()


def mercInfo():

    mercImage = PhotoImage(file=mercPic)
    img1.configure(image = mercImage)
    img1.image = mercImage
    img1.pack()




sun = Button(buttonFrame, text="THE SUN",command=sunInfo)
sun.pack(side=TOP)

mercury = Button(buttonFrame, text="MERCURY",command=mercInfo)
mercury.pack(side=TOP)

venus = Button(buttonFrame, text="VENUS")
venus.pack(side=TOP)

earth = Button(buttonFrame, text="EARTH")
earth.pack(side=TOP)

mars = Button(buttonFrame, text="MARS")
mars.pack(side=TOP)

jupiter = Button(buttonFrame, text="JUPITER")
jupiter.pack(side=TOP)

saturn = Button(buttonFrame, text="SATURN")
saturn.pack(side=TOP)

uranus = Button(buttonFrame, text="URANUS")
uranus.pack(side=TOP)

neptune = Button(buttonFrame, text="NEPTUNE")
neptune.pack(side=TOP)

root.mainloop() # 
EN

Stack Overflow用户

发布于 2014-03-30 19:26:10

因为可变范围,它不起作用了。简单地说:变量img1属于函数suninfo(),所以当任何其他函数试图访问它时,它都不能访问它,因此跟踪告诉您:

代码语言:javascript
复制
NameError: global name 'img1' is not defined

最好的修复方法是将代码放入类中,但最快的修复方法是在函数之外创建img1,然后根据需要更新它:

代码语言:javascript
复制
buttonFrame = Frame(root)
buttonFrame.pack(side=LEFT)

textFrame = Frame(root)
textFrame.pack(side=TOP)

img1 = Label(textFrame) #Create img1 outside the function
img1.pack()

def sunInfo():
    sunImage = PhotoImage(file=sunPic)
    img1.pack_forget()                 #Drop previous img1 picture
    img1.configure(image = sunImage)
    img1.image = sunImage
    img1.pack()                        #Re-pack as new image

def mercInfo():
    mercImage = PhotoImage(file=mercPic)
    img1.pack_forget()
    img1.configure(image = mercImage)
    img1.image = mercImage
    img1.pack()

sun = Button(buttonFrame, text="THE SUN",command=sunInfo)
sun.pack(side=TOP)

mercury = Button(buttonFrame, text="MERCURY",command=mercInfo)
mercury.pack(side=TOP)
票数 2
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22748267

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档