2013-07-25 44 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