2016-07-29 111 views
-1

在Python中製作GUI非常新,我到處搜索,但無法找到我在找什麼。我只是想要一個程序,用戶輸入一個半徑,然後程序用鼠標單擊或輸入按鈕打印標籤中的半徑區域。在此先感謝:)Python如何實現代碼到GUI

import Tkinter, math 

class calc_tk(Tkinter.Tk): 
def __init__(self,parent): 
    Tkinter.Tk.__init__(self,parent) 
    self.parent = parent 
    self.initialize() 

def initialize(self): 
    self.grid() 

    self.entryVariable = Tkinter.DoubleVar() 
    self.entry = Tkinter.Entry(self,textvariable=self.entryVariable) 
    self.entry.grid(column=0,row=0,sticky='EW') 
    self.entry.bind("<Return>", self.OnPressEnter) 
    self.entryVariable.set(u"Radius") 

    button = Tkinter.Button(self,text=u"Click to convert",command=self.OnButtonClick) 
    button.grid(column=1,row=0) 

    self.labelVariable = Tkinter.StringVar() 
    label = Tkinter.Label(self,textvariable=self.labelVariable,anchor="w",fg="white",bg="gray") 
    label.grid(column=0,row=1,columnspan=2,sticky='EW') 
    self.labelVariable.set(u"Please enter a radius.") 

    self.grid_columnconfigure(0,weight=1) 
    self.resizable(True,False) 
    self.update() 
    self.geometry(self.geometry())  
    self.entry.focus_set() 
    self.entry.selection_range(0, Tkinter.END) 

def OnButtonClick(self): 
    self.labelVariable.set(self.convertVariable.get()) 
    self.entry.focus_set() 
    self.entry.selection_range(0, Tkinter.END) 

def OnPressEnter(self,event): 
    self.converter() 
    self.labelVariable.set(self.convertVariable.get()) 
    self.entry.focus_set() 
    self.entry.selection_range(0, Tkinter.END) 

def converter(self): 
    self.convertVariable(math.pi * self.entryVariable.get()**2) 

if __name__ == "__main__": 
app = calc_tk(None) 
app.title('Radius Converter') 
app.mainloop() 
+0

出了什麼問題,你有什麼? – zondo

+0

一切,但「def轉換器」是從其他地方「複製」,因爲即時通訊仍在學習,但我不知道如何正確地將數學添加到代碼中,所以「def轉換器」中的一切都是我試圖找出它 – Chaost

+0

你有幾個問題。你應該調用'self.converter()'作爲OnPressEnter()的第一行。您不能將字符串添加到浮動。你應該做更多的事情,比如'「{}就是這個區域。」。format(self.convertVariable.get())'。 'converter()'定義'convertVariable',但設置'convert'。將'self.convert'切換到'self.convertVariable'。 'self.entryVariable'是一個'StringVar',所以記住在嘗試對它進行數學運算之前先轉換它。那將是'float(...)',或者只是使用'DoubleVar'。我認爲我沒有忘記任何東西,但告訴我它是否無效。 – zondo

回答

1

我已經修改你的代碼一點點。現在代碼將顯示標籤上的區域,如您所述。檢查代碼。如果我錯了,請告訴我。

import Tkinter, math 
 

 
class calc_tk(Tkinter.Tk): 
 
    def __init__(self,parent): 
 
     Tkinter.Tk.__init__(self,parent) 
 
     self.parent = parent 
 
     self.initialize() 
 

 
    def initialize(self): 
 
     self.grid() 
 

 
     self.entryVariable = Tkinter.StringVar() 
 
     self.entry = Tkinter.Entry(self,textvariable=self.entryVariable) 
 
     self.entry.grid(column=0,row=0,sticky='EW') 
 
     self.entry.bind("<Return>", self.OnPressEnter) 
 
     self.entryVariable.set(u"Radius") 
 

 
     button = Tkinter.Button(self,text=u"Click to convert",command=self.OnButtonClick) 
 
     button.grid(column=1,row=0) 
 

 
     self.labelVariable = Tkinter.StringVar() 
 
     label = Tkinter.Label(self,textvariable=self.labelVariable,anchor="w",fg="white",bg="gray") 
 
     label.grid(column=0,row=1,columnspan=2,sticky='EW') 
 
     self.labelVariable.set(u"Please enter a radius.") 
 

 
     self.grid_columnconfigure(0,weight=1) 
 
     self.resizable(True,False) 
 
     self.update() 
 
     self.geometry(self.geometry())  
 
     self.entry.focus_set() 
 
     self.entry.selection_range(0, Tkinter.END) 
 

 
    def OnButtonClick(self): 
 
     
 
     self.labelVariable.set(str(self.converter())+" is the area.") 
 
     self.entry.focus_set() 
 
     self.entry.selection_range(0, Tkinter.END) 
 

 
    def OnPressEnter(self,event): 
 
     self.labelVariable.set(str(self.converter())+" is the area.") 
 
     self.entry.focus_set() 
 
     self.entry.selection_range(0, Tkinter.END) 
 

 
    def converter(self): 
 
     print self.entryVariable.get() 
 
     return (math.pi * (float(self.entryVariable.get()) * float(self.entryVariable.get()))) 
 

 
if __name__ == "__main__": 
 
    app = calc_tk(None) 
 
    app.title('Radius Converter') 
 
    app.mainloop()

+0

所以我應用了修改,但現在我得到一個語法錯誤,它在'if __name__ =='__main __「中指責」:「:' – Chaost

+0

它的縮進問題..我修改了它。 –

+0

該代碼顯示爲代碼段。你有沒有測試過可以運行它? –