При обращении обращении к функции on_press=self.btn_press весь код крашится
При обращении к функции on_press=self.btn_press весь код крашится, если эту строку убрать то код будет работать нормально, но эта строка обращается к функции которая отвечает за нажатие кнопки, помогите пожалуйста строка 46.
from kivy.app import App
from kivy.uix.button import Button
from kivy.config import Config
from kivy.uix.textinput import TextInput
from kivy.uix.scatter import Scatter
from kivy.uix.textinput import TextInput
from kivy.uix.anchorlayout import AnchorLayout
from kivy.uix.boxlayout import BoxLayout
from kivy.core.window import Window
from pyrogram import Client, filters
from pyrogram.errors import FloodWait
from pyrogram.types import ChatPermissions
Window.clearcolor = (1, 1, 1, 1) # установка цвета нового фона
#Config.set("graphics", "relizeble", "0")# ---\
#Config.set("graphics", "width", "400") # \ высота и ширина экрана, изменять его потом нельзя
#Config.set("graphics", "heigth", "600")#------/
api_hash = "" # переменная для будующих данных
api_id = "" # переменная для будующих данных
class MyApp(App):
def build(self):
fl = AnchorLayout() # этот лаяут будет делать ПО динамическим
bl = BoxLayout(orientation = "vertical", size_hint = (.5, .5))# тоже лаяут но создает боксы
self.test = TextInput(text = "api_id", font_size=25, background_color=[9, 9, 9, 9])# Этот лаяут как input для получения данных от пользователя
self.text_input1 = TextInput(text = "api_hash", font_size=25, background_color=[9, 9, 9, 9])# Этот лаяут как input для получения данных от пользователя
bl.add_widget(self.test) # создаю Text_input через BoxLayout
bl.add_widget(self.text_input1)# создаю Text_input через BoxLayout
bl.add_widget(Button( # создаю кнопkу через BoxLayout
text = "подтвердить",
font_size=25, # font_size рaзмер шрифта
on_press=self.btn_press, # on_press нажата, эта строка подводит весь код
background_color=[1, 1, 1, 1] # background_color цвет RGBA в %
#background_normal="", # background_normal делает цвет ярче
))
fl.add_widget(bl) # отношу BoxLayout к fl
#s = Scatter()
#s.add_widget(fl)
return fl # возращаю fl
def btn_press(self):
global api_id #глобальная переменная
global api_hash #глобальная переменная
print(self.text_input.text) #вывожу данные из Text_input
print(self.text_input1.text)#
api_id= self.text_input.text1#
api_hash=self.text_input1.text1#
app = Client("00ef8b3beaab981d8661a5e596123447", api_id = api_id, api_hash= api_hash)#
@app.on_message(filters.text & filters.private)#
def echo(client, message):#
message.reply_text(message.text)#
if __name__ == "__main__":#
MyApp().run()#
#app.run()#
Ошибка:
TypeError: btn_press() takes 1 positional argument but 2 were given
Process finished with exit code 1
Ответы (1 шт):
Буквальный перевод ошибки: btn_press() принимает 1 позиционный аргумент, но было передано 2 (аргумента).
Чтобы устранить ошибку, просто добавьте еще один параметр методу btn_press(), пример:
def btn_press(self, arg):
...
Если смотреть в справке, функция-обработчик нажатия должна принимать параметр instance. Т.к. у вас это не просто функция, а метод, то первым параметром в него придет self (объект MyApp, от которого вызван метод), а уже вторым - instance.