AttributeError:' str'对象没有属性' set'在tkinter

时间:2017-02-10 01:29:05

标签: python python-3.x tkinter

我正在尝试使用tkinter在Python中创建和实现一个简单的表单。表单本身是使用PAGE创建的,我现在正在尝试编写与表单交互的代码(我还在学习Python,所以请耐心等待。)

我收到了一个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()

1 个答案:

答案 0 :(得分:1)

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

将丢弃StringVar并将其替换为常规str,即没有set方法的那种。

相反

self.countString.set("0")