2017-02-10 52 views
0

我想用tkinter在Python中創建和實現一個簡單的表單。表單本身是使用PAGE創建的,現在我正在嘗試編寫代碼來與表單交互(我仍在學習Python,請耐心等待)。AttributeError:'str'對象在tkinter中沒有屬性'set'

我得到一個AttributeError:'str'對象在試圖從定義標籤的類的外部動態設置標籤中的文本時沒有屬性'set'。我在網上閱讀的所有內容都表明,這是實現我想要的結果的方法,但是我被這個錯誤所困擾。任何幫助表示讚賞。

錯誤發生在setTimerString函數中(這是Pulse類的一部分)。

這裏是我主要的代碼文件:

#! /usr/bin/env python 
# 
# GUI module generated by PAGE version 4.8.5 
# In conjunction with Tcl version 8.6 
# Feb 10, 2017 09:38:24 AM 
import sys 

try: 
    from Tkinter import * 
except ImportError: 
    from tkinter import * 

try: 
    import ttk 
    py3 = 0 
except ImportError: 
    import tkinter.ttk as ttk 
    py3 = 1 

import pulse_support 

def vp_start_gui(): 
    '''Starting point when module is the main routine.''' 
    global val, w, root, top 
    root = Tk() 
    top = Pulse (root) 
    pulse_support.init(root, top) 
    root.mainloop() 

w = None 
def create_Pulse(root, *args, **kwargs): 
    '''Starting point when module is imported by another program.''' 
    global w, w_win, rt 
    rt = root 
    w = Toplevel (root) 
    top = Pulse (w) 
    pulse_support.init(w, top, *args, **kwargs) 
    return (w, top) 

def destroy_Pulse(): 
    global w 
    w.destroy() 
    w = None 

def startTimer(): 
    global count 
    count = 0 # Reset it evert time the user starts the program 
    top.setTimerString("12") 


def runProgram(): 
    # Run the main program 
    startTimer() 

def closeProgram(): 
    exit() 


class Pulse: 
    def __init__(self, top=None): 
     '''This class configures and populates the toplevel window. 
      top is the toplevel containing window.''' 

     self._bgcolor = '#d9d9d9' # X11 color: 'gray85' 
     self._fgcolor = '#000000' # X11 color: 'black' 
     self._compcolor = '#d9d9d9' # X11 color: 'gray85' 
     self._ana1color = '#d9d9d9' # X11 color: 'gray85' 
     self._ana2color = '#d9d9d9' # X11 color: 'gray85' 

     top.geometry("320x344+599+249") 
     top.title("Pulse") 
     top.configure(background="#d9d9d9") 

     # Set the strings to use for the form 
     self.countString = StringVar() 
     self.timerString = StringVar() 
     self.countString = "0" 
     self.timerString = "0" 

     self.btnExit = Button(top) 
     self.btnExit.place(relx=0.84, rely=0.03, height=24, width=39) 
     self.btnExit.configure(activebackground="#d9d9d9") 
     self.btnExit.configure(activeforeground="#000000") 
     self.btnExit.configure(background="#d9d9d9") 
     self.btnExit.configure(command=closeProgram) 
     self.btnExit.configure(disabledforeground="#a3a3a3") 
     self.btnExit.configure(foreground="#000000") 
     self.btnExit.configure(highlightbackground="#d9d9d9") 
     self.btnExit.configure(highlightcolor="black") 
     self.btnExit.configure(pady="0") 
     self.btnExit.configure(text='''Exit''') 
     self.btnExit.configure(width=39) 

     self.btnStart = Button(top) 
     self.btnStart.place(relx=0.31, rely=0.17, height=104, width=125) 
     self.btnStart.configure(activebackground="#d9d9d9") 
     self.btnStart.configure(activeforeground="#000000") 
     self.btnStart.configure(background="#d9d9d9") 
     self.btnStart.configure(command=runProgram) 
     self.btnStart.configure(disabledforeground="#a3a3a3") 
     self.btnStart.configure(foreground="#000000") 
     self.btnStart.configure(highlightbackground="#d9d9d9") 
     self.btnStart.configure(highlightcolor="black") 
     self.btnStart.configure(pady="0") 
     self.btnStart.configure(text='''Start''') 
     self.btnStart.configure(width=125) 

     self.Label1 = Label(top) 
     self.Label1.place(relx=0.31, rely=0.58, height=21, width=54) 
     self.Label1.configure(background="#d9d9d9") 
     self.Label1.configure(disabledforeground="#a3a3a3") 
     self.Label1.configure(foreground="#000000") 
     self.Label1.configure(text='''Timer:''') 
     self.Label1.configure(width=54) 

     self.lblTimer = Label(top) 
     self.lblTimer.place(relx=0.5, rely=0.58, height=21, width=32) 
     self.lblTimer.configure(background="#a8aeff") 
     self.lblTimer.configure(disabledforeground="#a3a3a3") 
     self.lblTimer.configure(foreground="#000000") 
     self.lblTimer.configure(textvariable=self.countString) 
     self.lblTimer.configure(width=32) 

     self.Label3 = Label(top) 
     self.Label3.place(relx=0.33, rely=0.67, height=21, width=43) 
     self.Label3.configure(background="#d9d9d9") 
     self.Label3.configure(disabledforeground="#a3a3a3") 
     self.Label3.configure(foreground="#000000") 
     self.Label3.configure(text='''Count:''') 

     self.lblCount = Label(top) 
     self.lblCount.place(relx=0.5, rely=0.67, height=21, width=32) 
     self.lblCount.configure(activebackground="#f9f9f9") 
     self.lblCount.configure(activeforeground="black") 
     self.lblCount.configure(background="#ffa8a8") 
     self.lblCount.configure(disabledforeground="#a3a3a3") 
     self.lblCount.configure(foreground="#000000") 
     self.lblCount.configure(highlightbackground="#d9d9d9") 
     self.lblCount.configure(highlightcolor="black") 
     self.lblCount.configure(textvariable=self.countString) 

     self.Label4 = Label(top) 
     self.Label4.place(relx=0.13, rely=0.84, height=36, width=237) 
     self.Label4.configure(background="#d9d9d9") 
     self.Label4.configure(disabledforeground="#a3a3a3") 
     self.Label4.configure(foreground="#000000") 
     self.Label4.configure(text='''Press the start button to start the program. 
Every time your pulse beats, press the P key.''') 

    def setTimerString(self, newVal): 
     self.timerString.set(newVal) 


if __name__ == '__main__': 
    vp_start_gui() 
+2

閱讀什麼跟它緊密錯誤和信任。它告訴你一個普通的字符串沒有'set'方法。這是一個真實的陳述。所以,無論你想要調用的方法是錯誤的,或者變量不是你認爲的那樣。 –

回答

1
self.countString = StringVar() 
self.countString = "0" 

會扔掉StringVar並用常規str取代它,即有沒有set方法的那種。

相反

self.countString.set("0") 
+0

非常感謝,謝謝。這麼簡單,現在我看着它。 –