簡體   English   中英

我似乎無法在 Python/Tkinter 中將 object 傳遞給另一個 class

[英]I can't seem to pass on an object to another class in Python/Tkinter

我有一個 object,我想通過另一個框架 class 中的方法傳遞到一個新框架。我找到了一個看起來與我所追求的相似的解決方案並嘗試了它,但是,object 沒有通過。 事實上,我收到一條錯誤消息,指出“* 之后的值必須是可迭代的,而不是 PackingList”,其中 PackingList 是 class,object 由其構成。 我試圖改為獲取 object 的“名稱”屬性並將其傳遞給下一幀,但它只返回一個空元組。 我真的被困住了,感謝您的幫助。

class App(tk.Tk):

    def __init__(self, *args, **kwargs):

        tk.Tk.__init__(self, *args, **kwargs)

        container = tk.Frame(self)
        container.pack(side = "top", fill = "both", expand = True)
        container.grid_rowconfigure(0, weight = 1)
        container.grid_columnconfigure(0, weight = 1)

        self.frames = {}

        for F in (Homescreen, Menuscreen, Create, ShowUpcoming, ShowAll, OpenList, Search, Edit):

            frame = F(container, self, *args, **kwargs)
            self.frames[F] = frame
            frame.grid(row = 0, column = 0, sticky = "nsew")

        self.show_frame(Homescreen)

    def show_frame(self, container, *args, **kwargs):

        frame = self.frames[container]
        frame.tkraise()

...

class ShowAll(tk.Frame):

    def __init__(self, parent, controller):

        tk.Frame.__init__(self, parent)
        tk.Label(self, text = "Alla packningslistor", font = ("Times new roman", 30)).place(x = 110, y = 0)
        self.controller = controller
        objectList = PK.main()
        objectOpen = PK.showAll(objectList)

        self.radiobutton_list = []
        self.objectList = objectList

        for i in range(len(objectOpen)):
            radiobutton = tk.Radiobutton(self, text = objectOpen[i], command = functools.partial(self.objectToOpen, idx = i)).place(x = 150, y = 100 + i*30)
            self.radiobutton_list.append(radiobutton)
    
    def objectToOpen(self, idx):
        
        objectID = self.objectList[idx]
        
        
        return self.controller.show_frame(OpenList, *objectID)
class OpenList(tk.Frame):

    def __init__(self, parent, controller, *objectID):
        
        tk.Frame.__init__(self, parent)
        #lala = getattr(objectID, "name")
        #print(lala)

正如我所說,我試圖只傳遞 object 的名稱,但它在下一幀 class 中打印為一個空元組。

我不明白你的問題。 但是這里是我對你的App class的修正,希望這些修正能夠幫助你理解Python和tkinter,調試你的代碼rest。

如果您需要更詳細的幫助,如果您可以通過在評論部分說明您想對類AppShowAllOpenList (或它們的方法)做什么來更具體,這將很有幫助,我會看看我能如何幫助您通過進一步闡述我的答案。

import tkinter as tk


class App(tk.Tk):

def __init__(self, *args, **kwargs):
    super().__init__()
    self.container = tk.Frame(self)
    self.container.pack(side="top", fill="both", expand=True)

    self.frames = {}
    colors = ('white', 'black', 'red', 'green', 'blue', 'cyan', 'yellow', 'magenta')
    frames = ("Homescreen", "Menuscreen", "Create", "ShowUpcoming", "ShowAll", "OpenList", "Search", "Edit")
    col=0
    for C, F in zip(colors, frames):
        print(f'{F=}')
        self.frames[F] = tk.Frame(self.container, background=C, width=100, height=50)
        self.frames[F].grid(row=0, column=col, sticky="nsew")
        # col += 1   # uncomment this to see all frames
    self.show_frame('Create')  # you should see red

def show_frame(self, container):
    self.frames[container].tkraise()


if __name__ == "__main__":
    app = App()
    app.mainloop()

暫無
暫無

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

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