我从下面的代码段中收到错误“全局名称'开始'未定义”。但是displayImage(img)中的start(panel)调用会导致我想要看到的图像显示在GUI中;没有它没有图像出现;它必须做点什么。但我得到了上述错误。我在Ubuntu 12.04中运行这个程序。顺便说一句,我是Python和Tkinter的新手。有什么办法摆脱这个错误?编辑:在运行时通过单击按钮调用loadPicture(文件)来添加图像。
import numpy as np
from Tkinter import *
import cv2 as cv
from tkFileDialog import askopenfilename
import tkSimpleDialog as td
import math as mt
from PIL import ImageTk, Image
### General functions #############################################
def raiseFileChooser():
global filename
filename = askopenfilename()
loadPicture(filename)
def loadPicture(file):
# set global variable for other uses
global img
img = cv.imread(file, 1)
img = cv.cvtColor(img, cv.COLOR_RGB2BGR)
displayImage(img, display1)
def displayImage(image, panel):
temp = Image.fromarray(image)
bk = ImageTk.PhotoImage(temp)
bkLabel = Label(display1, image = bk)
bkLabel.place(x=0, y=0, relwidth=1, relheight=1)
start(panel)
### Start App ###########################################
#### get GUI started
root = Tk()
np.set_printoptions(threshold=np.nan) # so I can print entire arrays
### global variables ####################################
relStatus = StringVar()
relStatus.set(None)
text = StringVar()
filepath = StringVar()
filename = "No file chosen"
img = None
gsc = None
eStatus = StringVar()
eStatus.set(None)
display1 = None
display2 = None
### GUI #################################################
root.title("Picture Transformer")
root.geometry("700x600")
app = PanedWindow(root)
app.pack(padx=20, pady=20)
#Button Panel##############
buttonPanel = Frame(app,width=200, height = 400)
buttonPanel.pack(side=LEFT)
chooser = Button(buttonPanel, text="Choose File", height=1, width=9, command=raiseFileChooser)
chooser.pack()
#set up display panels ###########################
display1 = Frame(app, width=900, height=900, bg="#cccccc")
display1.pack(side=LEFT, fill=BOTH, expand=1)
root.mainloop()
编辑: 堆栈跟踪:
Traceback (most recent call last):
File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 1413, in __call__
return self.func(*args)
File "hw2.py", line 78, in raiseFileChooser
loadPicture(filename)
File "hw2.py", line 86, in loadPicture
start(panel)
NameError: global name 'start' is not defined
答案 0 :(得分:1)
错误告诉您到底出了什么问题 - 您的代码中没有全局start
函数。事实上,就我所知,在你创建的任何对象中,任何地方都没有start
方法。为什么你认为你应该调用名为start
的函数?是否有某些文件告诉你这样做?
我的猜测是,你在IDLE中运行,当你调用不存在的start
函数时,脚本会崩溃。当脚本崩溃时,它返回到IDLE,现在可以看到您创建到该点的任何窗口。
您的代码中最明显的问题是您没有创建根窗口。在脚本的早期某个地方,在创建StringVar
的任何小部件或实例之前,您需要执行以下操作:
root = Tk()
答案 1 :(得分:-1)
尝试
panel.start()
只是一个猜测。试一试,你或许可以解决问题。
答案 2 :(得分:-1)
root.mainloop()在start()的位置工作。