Выполните вход / выход, который меняет имя в зависимости от статуса - PullRequest
1 голос
/ 15 июня 2019

Сначала я попытался установить переменную login_status, а затем заставить кнопку меняться каждый раз, когда вызывается определение нажатия кнопки. Ниже приведено то, с чем я застрял, я могу заставить его работать, когда он сам по себе, но как только я как класс, он терпит неудачу

import tkinter as tk
from tkinter import StringVar

program_name="Quick Testing"
global loginout_button
loginoutbutton = StringVar()


def loginout_press():
    if loginout_button['text'] == "Log In":
       loginout_button.configure(text="Log Out")

else:
    loginout_button.configure(text="Log In") ###

class ProgramMain (tk.Tk):
    def __init__(self, *args, **kwargs):
        tk.Tk.__init__(self, *args, **kwargs)
        self.title(program_name)
        user_frame = tk.Frame(self, bg="grey", bd=2, relief="raised")
        user_frame.place(relx=0, rely=0.0, relwidth=9, relheight=1)
        loginout_button = tk.Button(user_frame, text="Log In", fg='black', bg="grey", font='bold 10',
                                command=loginout_press)
        loginout_button.place(relx=0.0, rely=0.0, relwidth=0.12, relheight=1)


app = ProgramMain()
app.mainloop()

Объект 'NoneType' не имеет атрибута '_root'

1 Ответ

1 голос
/ 15 июня 2019

Вместо этого вы должны сделать свою функцию loginout_press методом класса ProgramMain. Также прямо сейчас ваш loginout_button является локальной переменной, а не атрибутом класса.

Вот как обернуть все внутри вашего ProgramMain класса:

import tkinter as tk

program_name="Quick Testing"

class ProgramMain (tk.Tk):
    def __init__(self, *args, **kwargs):
        tk.Tk.__init__(self, *args, **kwargs)
        self.title(program_name)
        user_frame = tk.Frame(self, bg="grey", bd=2, relief="raised")
        user_frame.place(relx=0, rely=0.0, relwidth=9, relheight=1)
        self.loginout_button = tk.Button(user_frame, text="Log In", fg='black', bg="grey", font='bold 10',
                                command=self.loginout_press)
        self.loginout_button.place(relx=0.0, rely=0.0, relwidth=0.12, relheight=1)

    def loginout_press(self):
        if self.loginout_button['text'] == "Log In":
            self.loginout_button.configure(text="Log Out")
        else:
            self.loginout_button.configure(text="Log In")

app = ProgramMain()

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