簡體   English   中英

使用Tkinter時未定義'self'錯誤

[英]'self' is not defined error while using Tkinter

import tkinter as tk

root = tk.Tk()
root.title('Book')

class phonebook:
    def __init__(self,first_name, last_name, street, postcode, city, number):
        self.first_name = first_name
        self.last_name = last_name
        self.street = street
        self.postcode = postcode
        self.city = city
        self.number = number     

    def create(self):
        creation = tk.Tk()

        tk.Label(creation, text = 'First Name').grid(row = 0, column = 0)
        tk.Label(creation, text = 'Last Name').grid(row = 1, column = 0)
        tk.Label(creation, text = 'Stadt').grid(row = 2, column = 0)
        tk.Label(creation, text = 'Postleitzahl').grid(row = 3, column = 0)
        tk.Label(creation, text = 'Straße').grid(row = 4, column = 0)
        tk.Label(creation, text = 'Telefonnummer').grid(row = 5, column = 0)

        self.first_name = tk.Entry(creation)
        self.last_name = tk.Entry(creation)
        self.street = tk.Entry(creation)
        self.postcode = tk.Entry(creation)
        self.city = tk.Entry(creation)
        self.number = tk.Entry(creation)   


menubar = tk.Menu(root)
root.config(menu = menubar)
menubar.add_command(label = 'Anlegen', command = self.create)
menubar.add_command(label = 'Bearbeiten')
menubar.add_command(label = 'Löschen')
menubar.add_command(label = 'Sortieren')
menubar.add_command(label = 'Suche')
menubar.add_command(label = 'Hilfe')

root.mainloop() 

當我嘗試上面的代碼時,出現此錯誤:

Traceback (most recent call last):
  File "C:/Users/Lenovo M93p/Dropbox/Uni Dropbox/EPR/EPR_Blatt05_Jonas_Emrich_Karl_Wilhelm_Viebach/geathb.py", line 45, in <module>
    menubar.add_command(label = 'Anlegen', command = self.create)
NameError: name 'self' is not defined

當我改變時:

menubar.add_command(label = 'Anlegen', command = self.create)

至:

menubar.add_command(label = 'Anlegen', command = phonebook.create)

我收到此錯誤:

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Users\Lenovo M93p\AppData\Local\Programs\Python\Python35-32\lib\tkinter\__init__.py", line 1550, in __call__
    return self.func(*args)
TypeError: create() missing 1 required positional argument: 'self'

我試圖在create函數中更改某些內容,更改了命令行,但是每次都會出現錯誤。

速度較慢:

在原始代碼中,您正在對self調用create方法,該方法未在范圍中聲明。

您要調用phonebook類的create方法,因此必須首先實例化后者。 基本上是這樣的:

p = phonebook(John, Doe, Evergreen Terrace, 12, Washington, 000)
p.create()

將按預期工作。 在您的情況下,您正在通過另一個方法調用該方法,該方法將變為:

p = phonebook(...)
menubar.add_command(label = 'Anlegen', command = p.create)

邊注

在Python中,請始終使用大寫字母(例如Phonebook來命名類。 這將避免您在類和實例之間混淆。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM