Python 使用Tkinter将图像添加到顶级窗口将显示在主窗口中

Python 使用Tkinter将图像添加到顶级窗口将显示在主窗口中,python,tkinter,Python,Tkinter,我正在尝试将图像添加到顶层窗口,而不是将图像显示在主窗口中。顶级窗口中有一个输入文本框(int值),其值在用户输入时不会更新(始终设置为0) Main窗口->主/父窗口, VerbWindow->顶级窗口 我想请人帮助我 下面是我的代码: #主窗口 从tkinter进口* 从tkinter导入ttk 从PIL导入图像,ImageTk 从gui.verb_窗口导入* 类MainWindow(): 定义初始(自我,主): self.master=master ###标签显示 self.main_la

我正在尝试将图像添加到顶层窗口,而不是将图像显示在主窗口中。顶级窗口中有一个输入文本框(int值),其值在用户输入时不会更新(始终设置为0)

Main窗口
->主/父窗口,
VerbWindow
->顶级窗口

我想请人帮助我

下面是我的代码:

#主窗口
从tkinter进口*
从tkinter导入ttk
从PIL导入图像,ImageTk
从gui.verb_窗口导入*
类MainWindow():
定义初始(自我,主):
self.master=master
###标签显示
self.main_label=label(self.master,text=“您想学什么?”,font=“Arial 15 bold”)
自我主标签包装(填充=X,pady=15)
###图像显示
self.image=image.open(“learn_derman.jpg”)
self.photo=ImageTk.PhotoImage(self.image)
self.pic_lab=标签(image=self.photo)
自拍照实验室包(侧=左侧,锚=西北,pady=15)
###组合框
self.learn\u combo=StringVar()
self.learn\u combo\u value=ttk.Combobox(self.master,宽度=30,textvariable=self.learn\u combo)
#添加组合框下拉列表
self.learn_combo_value['values']=('nomes',
“动词”,
“介词”,
“形容词”)
self.learn\u combo\u value.pack(pady=30)
###钮扣
self.go\u按钮=按钮(self.master,text=“Let's go!”,font=“Arial 15”,command=self。单击按钮)
self.go_按钮包(ipadx=10,ipady=10)
def单击(自行):
“”“快走”按钮功能”“”
打印(f“您已选择{self.learn\u combo.get()}”)
如果((self.learn\u combo.get()).lower()).strip()==(“动词”.lower()).strip():
打印(“你好”)
动词_win_obj=VerbWindow()
def main():
root=Tk()
mainwin=主窗口(根)
root.title(“VocabsEasy!”)
根部几何形状(“600x350”)
root.wm\u iconbitmap(“icon\u pic\u study.ico”)
root.mainloop()
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
main()
#详细窗口
从tkinter进口*
从tkinter导入ttk
从gui导入*
从PIL导入图像,ImageTk
类窗口(顶级):
定义初始化(自):
顶层。初始
自几何(“700x400”)
self.title(“动词”)
self.wm\u iconbitmap(“icon\u pic\u study.ico”)
self.verbTargetImage()
self.displayTargetLabel()
self.inputTargetTextbox()
def displayTargetLabel(自):
“”“要求您为今天设定目标”“”
self.target_label=label(self,text=“今天你想学多少动词?”,font=“Arial 13”)
self.target_label.pack(填充=X,pady=15)
def单击“开始学习”(自我):
“”“转到学习按钮功能”“”
打印(f“要学习的动词数量{self.target.get()}”)
def输入目标文本框(自身):
“”“从用户处获取输入”“”
self.target=IntVar()
self.target\u entry=entry(self,textvariable=self.target,width=10)
self.target\u entry.pack(pady=20)
self.go\u按钮=按钮(self,text=“go learn!”,font=“Arial 15”,command=self。单击“go\u learn”)
#self.go_按钮包(ipadx=10,ipady=8)
自走按钮位置(x=550,y=150)
打印(f“此处学习的动词数量{self.target.get()}”)
def verbTargetImage(自身):
“”“在主窗口中显示图像”“”
#动词_win=顶级(自我)
全球光电目标
self.image\u child=image.open(“set\u target.jpg”)
印刷品(“哈罗1”)
photo\u target=PhotoImage(self.image\u子对象)
打印(“hallo2”)
尝试:
self.pic\u lab=标签(图像=照片\u目标)
self.pic_实验室包(self,side=LEFT,anchor='nw',pady=15)
#self.pic_lab.image=self.photo
例外情况除外,如e:
打印(e)

您尚未指定标签的父项,默认情况下,它假定根(
MainWindow
)为父项。下面的方法应该有效

self.pic\u lab=标签(self,image=photo\u目标)
编辑

仔细检查代码后,我发现了两个其他问题

  • 您不能将
    Image.open()
    实例传递给
    tkinter
    PhotoImage
    ,如果您计划使用
    tkinter
    PhotoImage
    则直接传递路径,或者如果您希望使用
    PIL
    则将
    Image.open()
    实例传递给
    ImageTk.PhotoImage()
  • 您已在
    pack
    语句中添加了
    self
verbTargetImage
函数的最终代码应该如下所示

def verbTargetImage(自):
“”“在主窗口中显示图像”“”
#动词_win=顶级(自我)
全球光电目标
self.image\u child=image.open(“favicon.png”)
印刷品(“哈罗1”)
photo\u target=ImageTk.PhotoImage(self.image\u子对象)
打印(“hallo2”)
尝试:
self.pic\u lab=标签(self,image=photo\u目标)
自拍照实验室包(侧=左侧,锚=西北,pady=15)
#self.pic_lab.image=self.photo
例外情况除外,如e:
打印(e)
顶级窗口中有一个输入文本框(int值),其值在用户输入时不会更新(始终设置为0)

我无法复制此内容,我相信它按预期工作,这是我在输入
5
并单击
Go learn(开始学习)时得到的打印按钮

No. of verbs to be learnt 5

不建议在OOP中使用
global
,我认为使用OOP的原因之一是为了避免
global
。已经尝试过了,仍然会在主窗口上显示图像。@Arpita抱歉,我当时没有仔细阅读您的代码,我已经更新了答案。希望能有帮助。对不起,我没有得到任何不同的答案