【问题标题】:NameError: global name 'WTI' is not definedNameError:未定义全局名称“WTI”
【发布时间】:2014-10-24 19:29:47
【问题描述】:

作为我登录 GUI 的一部分,一旦输入了正确的详细信息,用户就会进入主屏幕页面。

def login():
     content = nameentry.get()
     content1 = IDentry.get()
     if content == "1" and content1 == "1":
         root.destroy(), execfile("Homescreenscroll - Copy3.1.py")

但是,当 Homescreenscroll - Copy3.1.py 打开并运行时,它会显示

线程 Thread-1 中的异常: Traceback(最近一次调用最后一次):

文件“C:\Users\Isaac\Desktop\Py\lib\threading.py”,第 530 行,在 __bootstrap_inner 中

self.run()

文件“C:\Users\Isaac\Desktop\Py\lib\threading.py”,第 483 行, 运行中

self.__target(*self.__args, **self.__kwargs)

文件“Homescreenscroll - Copy3.1.py”,第 5862 行,技巧

WTI['text'] = row[0]

NameError:未定义全局名称“WTI”

即使它在“Homescreenscroll - Copy3.1.py”文件中明确定义

它是“Homescreenscroll - Copy3.1.py”文件中此线程的一部分:

WTI = Label(text = "")

def trick(threadName, sleepTime):
    while 1 < 2:
    db=MySQLdb.connect(host = "xxx",
                    user = "xxx",
                    passwd = "xxx",
                    db = "test")
    cursor = db.cursor()
    cursor.execute("""xxxx""", (xxxxx)) 
    cursor.execute("""xxxx""", (xxxx))
    db.commit()
    row=cursor.fetchone()
    WTI['text'] = row[0]


try:
    t = threading.Thread(target=trick, args=("Trick running", 5))
    t.daemon = True
    t.start()
except: Exception,
print "start up"

【问题讨论】:

  • 你的login 函数和try 部分在这里看起来是空的,请修正缩进。
  • 我猜Label 它是一个Tkinter 对象。请添加此信息。另外,尝试在trick函数的开头添加global WTI这一行

标签: python error-handling


【解决方案1】:

定义 WTI。
在定义中添加一些文本,而不是什么都没有。

【讨论】:

  • 它最初是为了打开空的,然后函数“trick”将其填充。
  • 行[0]从何而来?
  • row[0] 来自 cursor.execute, row=cursor.fetchone()
  • row[0] 是什么样的输出?
【解决方案2】:

我只需要导入模块。这似乎对我来说已经完成了。

所以,从我输入的登录 GUI 中:

def login():
content = nameentry.get()
content1 = IDentry.get()
if content == "1" and content1 == "1":
    root.destroy()
    from HomescreenscrollCopy31 import FullScreenApp

现在唯一的问题是,在该模块中有一个名为“Trick”的线程,当通过登录方式调用它时它没有运行。它仅在我运行实际的 HomescreenscrollCopy31.py 版本本身时才有效!

HomescreenscrollCopy31.py 看起来像这样:

class FullScreenApp(object):
    def __init__(self, master, **kwargs):
        self.master=master
        pad=3
        self._geom='200x200+0+0'
        master.geometry("{0}x{1}+0+0".format(
            master.winfo_screenwidth()-pad, master.winfo_screenheight()-pad))
        master.bind('<Escape>',self.toggle_geom)            
    def toggle_geom(self,event):
        geom=self.master.winfo_geometry()
        print(geom,self._geom)
        self.master.geometry(self._geom)
        self._geom=geom

    def trick(threadName, sleepTime):
        while 1 < 2:
            ....
    try:
        t = threading.Thread(target=trick, args=("Trick running", 5))
        t.daemon = True
        t.start()
    except: Exception,
    print "start up"

当通过登录屏幕打开时,shell 只打印“启动”而不是“Trick running”

这是为什么?

【讨论】:

    猜你喜欢
    • 2011-04-27
    • 1970-01-01
    • 2012-05-29
    • 2013-08-23
    • 2014-04-03
    • 2017-05-12
    • 2015-09-01
    • 2012-03-10
    相关资源
    最近更新 更多