tkinter sticky=N+W Error: global name 'N' is not defined

tkinter sticky=N+W Error: global name 'N' is not defined

我正在制作一个 tkinter GUI,但我不明白为什么会显示此错误。另外,我在理解初始化框架时遇到了麻烦。这可能与错误有关吗?我对 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()

这是回溯:

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

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

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

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

还有一些其他问题阻碍了代码 运行。您在已经从 Frame 继承的 QueryInterface 中创建了一个单独的成员 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()