2013-07-25 41 views
2

我正在尝试使用Tkinter为我的Python程序制作启动程序。我使用了execfile函数,幸运的是它打开了目标GUI。然而,没有一个按钮可以工作,并且它会说大多数函数引用的全局变量没有被定义。“execfile”无法正常工作

的代码到启动程序:

def launch(): 
    execfile("gui.py") 

工程。为目标程序的基本代码:

from Tkinter import * 
gui = Tk() 
gui.title("This is a GUI") 

编辑: 一个按钮的实施例:

def buttonWin(): 
    buttonWindow = Toplevel(gui) 
    button = Button(buttonWindow, text = "Button", width = 10, command = None) 
    button.pack() 

当引用“GUI”为Toplevel的变量,它具有一个错误出现。我试图在启动脚本中定义的“鬼”变量,但只造成目标脚本打开第一,而不是启动:

gui = Tk() 
launcher = Tk() 
launcher.title("Launcher") 
def launch(): 
    return execfile("gui.py") 
launchButton = Button(launcher, text = "Launch", width = 10, command = launch) 

当我尝试按这个程序的按钮中的一个,我得到一个NameError : $ NameError:全局变量'gui'未定义$ 另外这是在Python 2.7.5中。 谢谢任何​​回答的人,并对代码块的任何错误感到抱歉;我是新来的。

+0

该代码片段中没有按钮,什么是没有正确格式化,所以有点难以知道你的问题是什么。如果您使用命令行中的Python解释器运行它,脚本是否可以正常工作?你能剥夺你的例子,但仍然失败,但小到足以发布? – Fredrik

+0

好吧,我编辑帖子以包含按钮代码。实际上,出于某种原因,我的电脑不让我运行我没有存储在我的Python27文件夹中的程序。当我在命令行输入“python launcher.py”时,它只是说“'python'不是一个可识别的应用程序或批处理文件。”抱歉,不清楚,我在沟通这些事情时遇到了一些小问题。 – Majora64

回答

1

问题是您已经错误地构建了Tkinter程序。

在“gui.py”你应该是这样的:

from Tkinter import * 

gui= Tk() 
gui.mainloop() 

您可以添加按钮执行的功能和定制:

from Tkinter import * 

gui = Tk() 
gui.title("This is a GUI")  

def launch(): 
    execfile("gui.py") 

launchbutton = Button(gui, text='Launch Program', command=launch) 
launchbutton.pack() 

gui.mainloop() 

我想与你的功能buttonWin你试图去做通常由班级处理的事情;请参阅unutbu的答案here

我不确定我是否解决了您的问题,但这应该是一个开始。

+0

谢谢,我其实已经知道了,尽管分配给Tk()的启动器对象被称为'启动器'而不是'gui'。但是当我这样做的时候,它会根据命令启动目标应用程序,但是没有任何功能/按钮可以工作。 – Majora64

+0

@ Majora64所以launcher.py和gui.py是独立的模块? –

+0

是的,是的。也对我迟到的回应感到抱歉。 – Majora64