【问题标题】:Unable to call a function inside Main()无法在 Main() 中调用函数
【发布时间】:2018-09-17 14:48:31
【问题描述】:

我是一名初学者,目前正在从事个人项目,使用 Tkinter 在 Python 2 上开发一个小型应用程序。但是,我在调用我创建的函数时遇到了问题。 1. 知道 Python 上的 Tkinter 是基于事件的,因此我创建了一个按钮来上传特定文件,然后将文件中的值存储到 List 变量中。 2. 然后,我使用另一个按钮尝试调用打印函数来打印存储在 List 变量中的值中的值。

希望有人能帮帮我。

def uploadFile():
   openFile = tkFileDialog.askopenfilename(filetypes = (("",".csv"),("All 
                 files", "*.*")))

   with open(openFile) as file:
     reader = csv.reader(file)
     xUF = [row for row in reader]
   return xUF

def printUF():
   for row in xUF:
       print row
       count=0
       if count>5:
          break
       count += 1

def main():
   l1=tk.Label(root,text="Upload File")
   l1.pack()
   l1.place(x=55,y=170)
   #buttons/placements for GUI
   b1=tk.Button(root,text="Browse", command=uploadFile)
   b1.pack()
   b1.place(x=100,y=200)

   b2=tk.Button(root,text="Print", command=printUF())
   b2.pack()


   root.title("HELLO")
   root.geometry("500x500")
   root.mainloop()


if __name__ == '__main__':
   main()

【问题讨论】:

  • 您没有真正说明您的问题或您遇到的错误。
  • xUFuploadFile() 内部的一个局部变量——它根本不存在于该函数之外。从函数中返回它不会改变任何东西,因为是 Tkinter 本身在调用按钮的命令函数,并且它不会对返回值做任何事情。
  • 我在顶部做了 delcare xUF 作为一个空列表。我想如果我在函数中返回 xUF 是否会返回一个值到我在顶部声明的具有相同变量名的值?

标签: python python-2.7 tkinter


【解决方案1】:

你在行周围缺少括号

def printUF():
   for row in xUF:
    print (row) <---
   count=0
   if count>5:
      break
   count += 1

【讨论】:

  • 注意 2.7 标签。
  • 还要注意 xUF 不存在
【解决方案2】:

我不太清楚你的错误是什么。但我怀疑是这样的:

当我认为您只需要 command=printUF 时,您将 command=printUF() 传递给 Button 类,因为 Button 可能希望函数在被命中时调用。正如您所拥有的那样,您将printUF 的结果而不是函数本身传递给Button。该行应如下所示:

b2=tk.Button(root,text="Print", command=printUF)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 2019-04-25
    • 1970-01-01
    • 2014-04-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多