2014-09-28 6 views
-1

파이썬/tkinter 라벨 위젯을 가져 와서 내용을 업데이트하려고합니다. 오늘의 이전 글에서는 위젯을 조합하는 방법에 대한 지침을 따랐습니다. 그러나 런타임에, 레이블 위젯은 Calculeaza 버튼을 클릭 할 때 내용을 변경하지 않습니다. 내가 알 수있는 한, Calculeaza() 함수가 잘못되었습니다. 만든파이썬에서 특정 텍스트를 엔트리로 설정하는 방법은 무엇입니까?

import sys 
from Tkinter import * 

class C2F(Frame): 
    #celsiusEntry = Entry 
    def __init__(self, parent): 
     Frame.__init__(self, parent) 
     self.parent = parent 
     self.initUI() 

    def initUI(self): 
     self.parent.title("Convertor Celsius/Fahrenheit") 
     self.pack(fill=BOTH, expand=1) 
     # Meniul superior cu File>Exit si Help>About 
     menuBar= Menu(self.parent) 
     self.parent.config(menu=menuBar) 
     fileMenu= Menu(menuBar) 
     fileMenu.add_command(label="Exit", command = self.onExit) 
     menuBar.add_cascade(label="File", menu=fileMenu) 
     # Adaugare butoane http://effbot.org/tkinterbook/grid.htm 
     """ 
     Label(self.parent, text="First").grid(row=0, column =0) 
     Label(self.parent, text="First").grid(row=1, column = 0) 
     """ 
     labelframe = LabelFrame(self.parent, text="Celsius/Fahrenheit") 
     labelframe.pack(fill="both", expand="yes") 
     left = Label(labelframe, text="Celsius") 
     left.grid(row=0, column=0) 
     Label(labelframe, text="Fahrenheit").grid(row=1, column =0) 

     global celsiusEntry 
     celsiusEntry=Entry(labelframe, bd=5) 
     celsiusEntry.grid(row=0, column=1) 

     global fahrenheitEntry 
     fahrenheitEntry=Entry(labelframe, bd=5, text="salut") 
     fahrenheitEntry.grid(row=1, column=1) 

     calcButon = Button(labelframe, text="Calculeaza", command=self.Calculeaza) 
     calcButon.grid(row=1, column=2) 

    def onExit(self): 
     self.parent.quit() 

    def Calculeaza(self): 
     cgrade =celsiusEntry.get() 
     if cgrade == ' ': 
      fahrenheitEntry.configure(text = ' ') 
     else: 
      cgrade=float(cgrade) 
      fgrade=(cgrade-32)/1.8 
      fahrenheitEntry.config(text=str(fgrade))# is not function 

def main(): 
    root= Tk() 
    root.geometry("350x350+300+300") 
    app= C2F(root) 
    #Label(root, text="First").grid(row=0, column =0) 
    root.mainloop() 

if __name__ == "__main__": 
    main() 

답변

0
import sys 
from tkinter import * 

class C2F(Frame): 

def __init__(self, parent): 
    Frame.__init__(self, parent) 
    self.parent = parent 
    self.initUI() 

def initUI(self): 
    self.parent.title("Convertor Celsius/Fahrenheit") 
    self.pack(fill=BOTH, expand=1) 
    # Meniul superior cu File>Exit si Help>About 
    menuBar= Menu(self.parent) 
    self.parent.config(menu=menuBar) 
    fileMenu= Menu(menuBar) 
    fileMenu.add_command(label="Exit", command = self.onExit) 
    menuBar.add_cascade(label="File", menu=fileMenu) 
    # Adaugare butoane http://effbot.org/tkinterbook/grid.htm 
    """ 
    Label(self.parent, text="First").grid(row=0, column =0) 
    Label(self.parent, text="First").grid(row=1, column = 0) 
    """ 
    labelframe = LabelFrame(self.parent, text="Celsius/Fahrenheit") 
    labelframe.pack(fill="both", expand="yes") 
    celsuisLabel = Label(labelframe, text="Celsius") 
    fahrenheitLabel = Label(labelframe, text="Fahrenheit") 
    celsuisLabel.grid(row=0, column=0) 
    fahrenheitLabel.grid(row=1, column =0) 

    self.celsius = StringVar() 
    self.fahrenheit = StringVar() 

    self.celsiusEntry=Entry(labelframe, bd=5,textvariable=self.celsius) 
    self.celsiusEntry.grid(row=0, column=1) 

    self.fahrenheitEntry=Entry(labelframe, bd=5,textvariable=self.fahrenheit) 
    self.fahrenheitEntry.grid(row=1, column=1) 

    calcButon = Button(labelframe, text="Calculeaza", command=self.Calculeaza) 
    calcButon.grid(row=1, column=2) 

def onExit(self): 
    self.parent.quit() 

def Calculeaza(self): 
    cgrade =self.celsius.get() 
    if cgrade == '': 
     self.fahrenheit.set('') 
    else: 
     cgrade=float(cgrade) 
     fgrade=(cgrade-32)/1.8 
     self.fahrenheit.set(str(fgrade)) 

def main(): 
    root= Tk() 
    root.geometry("350x350+300+300") 
    app= C2F(root) 
    #Label(root, text="First").grid(row=0, column =0) 
    root.mainloop() 

if __name__ == "__main__": main()` 

수정 : 당신은 전역 변수를 만들 필요가 없습니다

1

def Calculeaza(self): 
    cgrade =celsiusEntry.get() 
    if cgrade == ' ': 
     fahrenheitEntry.configure(text = ' ') 
    else: 
     cgrade=float(cgrade) 
     fgrade=(cgrade-32)/1.8 
     fahrenheitEntry.configure(text=str(fgrade))# is not function 

는 코드입니다. 자기를 사용하여 참조를 작성하십시오. 2 Entry 위젯에서 데이터를 조작하려면 먼저 변수 (Python 변수에 해당하는 tkinter 인 StringVar 또는 IntVar 또는 DoubleVar)를 만들어야합니다. 변수가 설정되면 엔트리 위젯에 "맵핑"해야합니다. 이렇게하면 프로그래밍 방식으로 입력 위젯 컨텐츠를 가져 오거나 설정할 수 있습니다.

건배 :)

+0

"필요"조금 너무 강한 :

다음은 후자의 예이다. 변수를 사용하는 것이 문제를 해결하는 유일한 방법은 아닙니다. –

+0

@BryanOakley 오 오 감사합니다. 그래도 파이썬에 익숙하지 않습니다. 감사. :) –

0

엔트리 위젯은 set 방법이 없습니다. 독자가 읽고있는 일부 문서가있는 경우 작성자에게 연락하여 정답이라고 말할 수 있습니다.

입력 위젯에는 두 가지 선택 항목이 있습니다. 하나, textvariable이 연결된 경우 set을 textvariable에 호출 할 수 있습니다. 이로 인해 textvariable과 연관된 위젯이 갱신됩니다. 둘째, textvariable이 없으면 insertdelete 메소드를 사용하여 위젯에있는 내용을 바꿀 수 있습니다.

fahrenheitEntry.delete(0, "end") 
fahrenheitEntry.insert(0, cgrade) 
관련 문제