tkinter sticky = N + W错误:未定义全局名称"N"

spa*_*hts 3 python global tkinter python-2.7

我正在制作一个tkinter GUI,但我不知道这个错误显示的原因.另外,我在理解初始化Frame时遇到了麻烦.这可能与错误有关吗?我还是Python新手,需要更多地了解它的工作原理.对不起,如果错误是基本的,我心烦意乱.我们将不胜感激.这是代码:

import Tkinter as tk
import string

class QueryInterface(tk.Frame):
  def __init__(self, master):
    tk.Frame.__init__(self, master)
    self.frame = tk.Frame(self.master)
    self.master.geometry("400x300+400+200")
    self.master.title("Thug Client-Side Honeypot")
    self.master.resizable(width = False, height = False)

    self.inputLabel = tk.Label(self, text = "Input arguments and URL:", font = "Calibri 11")
    self.inputLabel.grid(row = 1, column = 0, columnspan = 2, padx = 5, packy = 10, sticky = N+W)

    self.frame.pack()

def main():
  root = tk.Tk()
  app = QueryInterface(root)
  app.mainloop()

if __name__ == '__main__':
  main()
Run Code Online (Sandbox Code Playgroud)

这是追溯:

Traceback (most recent call last):
    File "QueryInterface.py", line 71, in <module>
    main()
  File "QueryInterface.py", line 67, in main
    app = QueryInterface(root)
  File "QueryInterface.py", line 17, in __init__
     self.inputLabel.grid(row = 1, column = 0, columnspan = 2, padx = 5, packy = 10, sticky = N+W)
 NameError: global name 'N' is not defined
Run Code Online (Sandbox Code Playgroud)

Jer*_*don 8

正如错误所提到的,问题是您正在引用未定义的变量N(以及W).

这些是在Tkinter中定义的变量,因此您可以执行tk.N和tk.W,或者只使用这些变量定义的字符串,例如:

 self.inputLabel.grid(row = 1, column = 0, columnspan = 2, padx = 5, pady = 10, sticky = 'nw')
Run Code Online (Sandbox Code Playgroud)

还有一些其他问题导致代码无法运行.您在QueryInterface中创建了一个单独的成员Frame,它已经从Frame继承并打包.

此代码运行.

import Tkinter as tk

class QueryInterface(tk.Frame):
  def __init__(self, master):
    tk.Frame.__init__(self, master)
    self.master.geometry("400x300+400+200")
    self.master.title("Thug Client-Side Honeypot")
    self.master.resizable(width = False, height = False)
    self.inputLabel = tk.Label(self, text = "Input arguments and URL:", font = "Calibri 11")
    self.inputLabel.grid(row = 1, column = 0, columnspan = 2, padx = 5, pady = 10, sticky = 'nw')
    self.pack()

def main():
  root = tk.Tk()
  app = QueryInterface(root)
  app.mainloop()

if __name__ == '__main__':
  main()
Run Code Online (Sandbox Code Playgroud)