Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Tkinter PIL图像未显示在函数内部_Python_Function_Tkinter_Python Imaging Library - Fatal编程技术网

Python Tkinter PIL图像未显示在函数内部

Python Tkinter PIL图像未显示在函数内部,python,function,tkinter,python-imaging-library,Python,Function,Tkinter,Python Imaging Library,我使用Tkinter在Toplevel()中显示图像,但当我将其放入函数中时,它不起作用(我知道这是一个非常初学者) 如您所见,用于显示图像的代码使用了两次,一次在函数内部,一次在函数外部。当它在外部工作正常,但在内部不工作时,它表示变量映像已分配但从未使用。它在函数内部不工作,因为tkimg在函数完成后被垃圾收集。您需要将图像绑定到不会被垃圾收集的变量中。例如,全局变量,或类中的实例变量,而不是局部变量 要使tkimg能够写入全局tkimg请在函数中使用global tkimg 不过,它应该是

我使用Tkinter在Toplevel()中显示图像,但当我将其放入函数中时,它不起作用(我知道这是一个非常初学者)


如您所见,用于显示图像的代码使用了两次,一次在函数内部,一次在函数外部。当它在外部工作正常,但在内部不工作时,它表示变量映像已分配但从未使用。

它在函数内部不工作,因为
tkimg
在函数完成后被垃圾收集。您需要将图像绑定到不会被垃圾收集的变量中。例如,全局变量,或类中的实例变量,而不是局部变量


要使
tkimg
能够写入全局
tkimg
请在函数中使用
global tkimg

不过,它应该是本地版本,只出现在新的
Toplevel
窗口中。@TigerhawkT3,所以它不起作用<当
服务
功能完成时,代码>tkimg仍在被垃圾收集。需要使用其他全局变量来保存对要使用的图像的引用。正如您所说的,我将
tkimg
设置为全局变量,它运行正常。
 # -*- coding: utf-8 -*-
import Tkinter
from Tkinter import *
import tkMessageBox
from tkMessageBox import *
import Image, ImageTk
import PIL.Image, PIL.ImageTk
import os
import subprocess


root = Tk()
root.title("Test")
quin=Toplevel()    
C = Tkinter.Canvas(quin, bg="white", height = 350, width = 350)   
directory=os.path.dirname(os.path.abspath(__file__))
filename=os.path.join(directory, 'un.png')
img=PIL.Image.open(filename)
tkimg=PIL.ImageTk.PhotoImage(img)
image = C.create_image(175,175,image=tkimg)
C.grid(row=5,column=5)
def Head():
     h1 = Label(root, text = "How to Secure a Computer", fg ="white", bg = "#00b8ff", width = 6,bd=2, height =2, font = "Arial", relief = RAISED)
     h1.grid(row= 0, column = 0, ipadx=122, pady=3, padx=5,columnspan=3)
def Mainmenu():
    menubar = Menu(root)
    filemenu = Menu(menubar, tearoff=0)
    filemenu.add_command(label="Exit", command=root.destroy)
    menubar.add_cascade(label="Options", menu=filemenu)
    helpmenu = Menu(menubar, tearoff=0)
    helpmenu.add_radiobutton(label="Help")
    helpmenu.add_radiobutton(label="User Manual Security Configuration Guide")
    menubar.add_cascade(label="Help", menu=helpmenu)
    root.config(menu=menubar)

def Mainbuttons():
    B1=Button(root,text="Services",height=2, width=6,bd=2, font = "Arial", fg = "#FFFFFF", bg = "#156cff",command=Services)
    B2=Button(root,text="Account Policies",height=2, width=6,bd=2, font = "Arial", fg = "#FFFFFF", bg = "#156cff")
    B3=Button(root,text="Firewall Config",height=2, width=6,bd=2, font = "Arial", fg = "#FFFFFF", bg = "#156cff")
    B4=Button(root,text="User Logon Time",height=2, width=6,bd=2, font = "Arial", fg = "#FFFFFF", bg = "#156cff")
    B5=Button(root,text="Security Policies",height=2, width=6,bd=2, font = "Arial", fg = "#FFFFFF", bg = "#156cff")
    B1.grid(row = 1, column = 0, ipadx=120,pady=2,padx=5)
    B2.grid(row = 1, column = 1, ipadx=120,pady=2,padx=5)
    B3.grid(row = 2, column = 1, ipadx=120,pady=2,padx=5)
    B4.grid(row = 2, column = 0, ipadx=120,pady=2,padx=5)
    B5.grid(row = 3, column = 0, ipadx=120,pady=2,padx=5)

def Services():
    serv=Toplevel()
    servcanv=Canvas(serv,height=250, width=250)
    servtext=Text(serv,width=26)
    servtext.insert(INSERT, "To start go to your start menu, in the search bar\ntype services.msc")
    servtext.grid(row=0, column=0)
    servcanv.grid(row=0, column=1)
    s = Tkinter.Canvas(serv, bg="white", height = 350, width = 350)   
    directory=os.path.dirname(os.path.abspath(__file__))
    filename=os.path.join(directory, 'un.png')
    img=PIL.Image.open(filename)
    tkimg=PIL.ImageTk.PhotoImage(img)
    image=s.create_image(175,175,image=tkimg)
    s.grid(row=5,column=5)





Mainmenu()
Mainbuttons()   
Head()
root.mainloop()