簡體   English   中英

使用tkinter將變量傳遞給按鈕單擊時的其他框架

[英]Pass variables to other frame on button click using tkinter

我很難理解tkinter的面向對象編程。

對於此示例,我希望用戶輸入一些數據,然后將其顯示在新框架中。 但是問題在於,在按下“檢查”按鈕之前,輸入似乎已經通過。

在單擊“檢查”按鈕之前,如何等待將數據傳遞到PageOne?

這是我到目前為止編寫的代碼(在一些示例代碼的幫助下):

import tkinter as tk


class Window(tk.Tk):
    def __init__(self, *args, **kwargs):
        tk.Tk.__init__(self, *args, **kwargs)
        container = tk.Frame(self)  # master
        container.grid()

        self.frames = {}

        for F in (StartPage, PageOne):
            frame = F(container, self)
            self.frames[F] = frame
            frame.grid(row=0, column=0, sticky="nsew")

        self.show_frame(StartPage)

    def show_frame(self, cont):
        frame = self.frames[cont]
        frame.tkraise()

    def get_page(self, page_class):
        return self.frames[page_class]


class StartPage(tk.Frame):  # inherit from tk.Frame
    def __init__(self, parent, controller):
        self.controller = controller
        tk.Frame.__init__(self, parent)

        tk.Label(self, text="Floor Time: ", font='helvetica 30').grid(row=0, sticky="w")
        tk.Label(self, text="MSL: ", font='helvetica 30').grid(row=1, sticky="w")

        self.e1 = tk.Entry(self, width=52)
        self.e2 = tk.Entry(self, width=52)

        self.e1.grid(row=0, column=1, sticky="w", pady=5, ipady=15)
        self.e2.grid(row=1, column=1, sticky="w", pady=5, ipady=15)

        self.e1.insert(0, "<format = hours>")

        button1 = tk.Button(self, text='Check', width="20", height="3", font='helvetica 20', bg="green",
                            command=lambda: controller.show_frame(PageOne))

        button1.grid(row=2, column=0, sticky="w", pady=4, padx=4)

        button2 = tk.Button(self, text='Quit', width="20", height="3", font='helvetica 20', bg="red",
                            command=self.quit)

        button2.grid(row=2, column=1, sticky="e", pady=4, padx=4)


class PageOne(tk.Frame):
    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)
        self.controller = controller
        x = self.controller.get_page(StartPage)

        print(x.e1.get())
        print(x.e2.get())


if __name__ == '__main__':
    b = Window()
    b.title("SMD Condition Tool")
    b.mainloop()

一種方法是覆蓋tkraise方法:

class PageOne(tk.Frame):
    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)
        self.controller = controller
        self.x = self.controller.get_page(StartPage)

    def tkraise(self):
        print(self.x.e1.get())
        print(self.x.e2.get())
        tk.Frame.tkraise(self) # call superclass

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM