Отсутствует 1 обязательный позиционный аргумент: «я» И нет длины атрибута - PullRequest
0 голосов
/ 11 марта 2020

Я делаю глупый «антикоронавирус» для P C. Это код:

import tkinter as tk
from tkinter import *
from tkinter import ttk
import random
window=Tk()
window.geometry('500x500')
window.resizable(False, False)
window.title('Anti Corona')
window.config(bg='light blue')
anti=tk.Label(text='Anti Corona')
anti.config(bg='light blue', font=('Arial black', 50))
anti.pack()
anti2=tk.Label(text='')
anti2.config(bg='light blue', font=('Arial black', 100))
anti2.pack()
def scaner(self):
    self.f1=tk.Frame()
    self.f1.pack()
    self.progress=ttk.Progressbar(f1)
    self.progress.length(50)
    self.progress.pack() 
scan=tk.Button(window, text='Scan!')
scan.config(height=1, width=10, font=('Century gothic', 30, 'bold'), bg='green', disabledforeground='', command=scaner())
scan.pack()

window.mainloop()

Проблема в том, что он выдает ошибку:

Traceback (most recent call last):
  File "C:\Users\cicle.EAAULAINF1W-008\Desktop\Anticorona.py", line 23, in <module>
    scan.config(height=1, width=10, font=('Century gothic', 30, 'bold'), bg='green', disabledforeground='', command=scaner())
TypeError: scaner() missing 1 required positional argument: 'self'

Но когда я завершаю все self в def, вывод:

Traceback (most recent call last):
  File "C:\Users\cicle.EAAULAINF1W-008\Desktop\Anticorona.py", line 23, in <module>
    scan.config(height=1, width=10, font=('Century gothic', 30, 'bold'), bg='green', disabledforeground='', command=scaner())
  File "C:\Users\cicle.EAAULAINF1W-008\Desktop\Anticorona.py", line 20, in scaner
    progress.length(50)
AttributeError: 'Progressbar' object has no attribute 'length'

Я не знаю, что делать! Помогите мне, пожалуйста!

Ответы [ 2 ]

1 голос
/ 11 марта 2020

У вас есть несколько проблем здесь.

1-й, ваш command=scaner() должен быть command=scaner.

2-й, ваша функция не должна принимать self в качестве аргумента. Это не встроенный класс.

3rd progress.length(50) вызовет ошибку, так как в классе прогресса нет такого метода с именем length. Вместо этого вы хотите сделать Progressbar(f1, length=50)

import tkinter as tk
from tkinter import ttk


def scanner():
    global progress
    f1 = tk.Frame()
    f1.pack()
    progress = ttk.Progressbar(f1, length=50)
    progress.pack()


window = tk.Tk()
window.geometry('500x500')
window.resizable(False, False)
window.title('Anti Corona')
window.config(bg='light blue')

tk.Label(text='Anti Corona', bg='light blue', font=('Arial black', 50)).pack()
tk.Label(text='', bg='light blue', font=('Arial black', 100)).pack()
tk.Button(window, text='Scan!', bg='green', disabledforeground='', height=1, width=10, 
          font=('Century gothic', 30, 'bold'), command=scanner).pack()
window.mainloop()
0 голосов
/ 11 марта 2020

Ваша подпись метода неверна.

def scanner(self):
    pass

У вас должно быть только self, если метод является членом экземпляра класса, ie.

class Hello:
    def print_it(self, msg):
        print(msg)

, и вы могли бы вызывайте его через класс

Hello().print_it('world')

, однако, поскольку вы создали функцию вне класса, self не требуется. Обновление сигнатуры метода для удаления self устранит эту проблему, ie:

def scanner():
    pass
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...