Передача переменной в кадр - PullRequest
1 голос
/ 30 мая 2019

Я создаю программу управления паролями.Пароли хранятся в разных категориях.Когда я нажимаю на категорию, она должна открыть страницу ViewPasswordsInsideCategory .Я не могу передать название категории на страницу ViewPasswordsInsideCategory .Пожалуйста помоги!Я новичок в Python и не могу решить эту проблему.

Я пытался передать аргумент, когда могу showframe , но не смог достичь цели.

class PasswordPage(Page):
    def __init__(self, *args, **kwargs):
        Page.__init__(self, *args, **kwargs)

        self.shared_data = {
            "category": tk.StringVar(),
            "password": tk.StringVar()}

        self.passwordScreen = Frame(self)
        self.passwordScreen.pack(fill="both", expand=True)
        self.passwordScreen.columnconfigure(0, weight=1)
        self.passwordScreen.rowconfigure(0, weight=1)

        self.frames = {}

        for F in (PasswordCategoryPage,ViewPasswords_InCategory,CreateNewPassword,ViewPassword,ModifyPassword):
            page_name = F.__name__
            frame = F(parent=self.passwordScreen, controller=self)
            self.frames[page_name] = frame


            frame.grid(row=0, column=0, sticky="nsew")

        self.show_frame("PasswordCategoryPage")

    def show_frame(self, page_name, arg=None):
        '''Show a frame for the given page name'''
        frame = self.frames[page_name]
        frame.tkraise()
class PasswordCategoryPage(tk.Frame):


    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)
        self.controller = controller        

        # passwords categories content

        self.labels = []

        self.dict = {'Home': 'Blue', 'Work': 'Red', 'School': 'Yellow', "Technical": 'Pink', "Office": 'Orange'}
        self.button = []

        j = 0
        for key, value in self.dict.items():
            self.name = key
            self.key = Label(self.pass_page_container,text=self.name,bg=value)

            # Add the Label to the list
            self.labels.append(key)

            self.key.grid(row=j, column=0, sticky=(N, S, E, W))
            self.key.bind("<Double-Button-1>", self.showPasswordPage)
            j = j + 1

    def showPasswordPage(self,event):
        #here need to pass the label that was clicked to the ViewPasswords_InCategory page
        self.controller.show_frame("ViewPasswords_InCategory")

class ViewPasswords_InCategory(tk.Frame):
    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)
        self.controller = controller
 #here need the name of the category selected to extract data from database

        # home banner
        home_label = Label(self, text=here need the name of the category, bg="blue", width=200, height=3, fg='white')
        home_label.pack(side=TOP, expand=False)


1 Ответ

0 голосов
/ 30 мая 2019

Простой способ - добавить новую функцию в класс ViewPasswords_InCategory для обновления баннера.Затем всякий раз, когда вы переключаетесь на страницу, вызывайте новую функцию.Мои предлагаемые изменения:

1) вернуть кадр, который поднимается в функции PasswordPage.show_frame(...):

class PasswordPage(Page):
    ...
    def show_frame(self, page_name, arg=None):
        '''Show a frame for the given page name'''
        frame = self.frames[page_name]
        frame.tkraise()
        return frame  # return the raised frame

2) добавить новую функцию, например set_category(...) внутри класса ViewPasswords_InCategoryобновить свой баннер:

class ViewPasswords_InCategory(tk.Frame):
    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)
        self.controller = controller
        # home banner
        self.home_label = Label(self, text='', bg="blue", width=200, height=3, fg='white') # changed to instance variable
        self.home_label.pack(side=TOP, expand=False)

    # new function to update banner
    def set_category(self, category):
        self.home_label['text'] = category

3) обновить PasswordCategoryPage.showPasswordPage(...), чтобы вызвать новую функцию:

class PasswordCategoryPage(tk.Frame):
    ...
    def showPasswordPage(self,event):
        #here need to pass the label that was clicked to the ViewPasswords_InCategory page
        self.controller.show_frame("ViewPasswords_InCategory").set_category(event.widget['text'])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...