#python #class #variables #inheritance #tkinter
#python #класс #переменные #наследование #tkinter
Вопрос:
Я пытаюсь ввести текст имени пользователя 1 и имени пользователя 2 tk с начальной страницы класса на страницу хэштега класса, когда я тестирую с помощью print в HastaPage, я получаю результат :
<class ‘tkinter.Запись’> .!hashtag_page.!startpage2.!entry2
Также я пытаюсь использовать функцию в def set_time() из StartPage в HastagPage класса start_hastag() func. Вывод
Ошибка имени: имя ‘set_time’ не определено
class StartPage(tk.Frame):
def __init__(self, master):
tk.Frame.__init__(self, master)
tk.Label(self, text="Enter Username").pack(side="top", fill="x", pady=10)
self.username = tk.Entry(self,)
self.username.pack()
tk.Label(self, text='Enter Pssword').pack(side='top', fill='x', pady=10)
self.password = tk.Entry(self)
self.password.pack()
global password1, username1
password1 = self.password
username1 = self.username
if(username.get('text') == None or password.get('text') == None):
tk.Button(self, text="Login",
command=lambda: master.switch_frame(StartPage)).pack()
else:
tk.Button(self, text="Login", command=lambda: master.switch_frame(PageOne)).pack()
def set_time():
time.sleep(160)
class Hashtag_page(tk.Frame):
def __init__(self, master):
tk.Frame.__init__(self, master)
self.hastag_lbl = tk.Label(self, text='Choice file with hashtags')
self.hastag_lbl.pack(side='top',fill='x',pady=10)
tk.Button(self, text='Browse files', command=self.browseFiles_hstg).pack()
tk.Label(self, text='Enter how much likes, follows action per hastag').pack()
self.amount_num = tk.Entry(self).pack()
tk.Button(self, text='Start Bot', command=self.start_hashtag).pack()
tk.Button(self, text='Back', command=lambda: master.switch_frame(PageOne)).pack()
def browseFiles_hstg(self):
filename = filedialog.askopenfilename(initialdir = "/",
title = "Select a File",
filetypes = (("Text files",
"*.txt*"),
("all files",
"*.*")))
# Change label contents
self.hastag_lbl.configure(text = filename)
def start_hashtag(self):
username_ = StartPage(self).username1
password = StartPage(self).password1
print(username1.get(),password1.get())
set_time()
Ответ №1:
похоже, вы пытаетесь вызвать функцию, вложенную в класс. Это разрешено, но обязательно вызывайте set_time()
с StartPage.set_time()
Я бы посоветовал переместить set_time()
метод из класса StartPage и полностью поместить его в класс Hashtag_page, поскольку он никогда не вызывается в StartPage, но это зависит от вас.
Посмотрите этот пример вызова метода ExampleClassA внутри ExampleClassB
class ExampleClassA:
def add_two_in_a(num1, num2):
return num1 num2
class ExampleClassB:
def __init__(self):
print("Initialized a new 'B' class")
result1 = ExampleClassA.add_two_in_a(1, 3)
result2 = ExampleClassA.add_two_in_a(2, 5)
print("Calling a function in class Example class A from example class B")
print("Result 1 is {}nResult 2 is {}".format(result1, result2))
if __name__ == "__main__":
ExampleClassB()
Комментарии:
1. Спасибо, я попробую этот способ, потому что мне нужно использовать метод set_time() и в других классах. Таким же образом я могу получить доступ к переменным имени пользователя и пароля, но метод .get() не возвращает текст из виджета tkinter. Любое преимущество
2. Когда я создал несколько примеров полей ввода TkInter и запустил их
.get()
без каких-либо аргументов, они вернули значения, как и ожидалось, но когда я передал.get('text')
, я получил TypeError, в котором говорится, что .get() — получено 2 аргумента, ожидается 1. Поэтому я бы попробовал изменить.get('text')
->.get()
3. Да, в этом тексте используется метка формы, но в любом случае я не могу передать значение в метод start_hastag()
4. Я также пытаюсь создать ethod def get_value() и извлекать значения в satrt_hashtag() Я получаю ошибку атрибута: объект типа ‘StartPage’ не имеет атрибута ‘login_data’
5.Я заметил, что вы пытаетесь обнаружить пустой ввод при отправке. Пустой ввод не будет возвращен
None
, при его использовании.get()
будет возвращена » — строка длиной 0, поэтому вместо того, чтобы проверять, эквивалентно ли этоNone
проверкеlen(username.get()) < 1
и совпадению сpassword.get()
. Короткий ответ на невозможность получитьStartPage.login_data
заключается в том, что in__init__(self, master)
self.login_data
никогда не определяется вclass StartPage.