Python Tkinter - 将控制器作为 tkinter 框架的参数传递

问题描述 投票:0回答:1

我有一个名为 App 的主类,它调用 4 个控制器。方法 start_from_home_page() 创建一个类型为 HomePage 的对象,我希望该对象能够访问我将作为参数传递的所有 4 个控制器。方法如下:

    def start_from_home_page(self, fileSystemController, widgetController, logicController):
        from pages.HomePage import HomePage
        self.homePage = HomePage(self, fileSystemController, widgetController, logicController)
        self.homePage.grid(row = 0, column = 0, sticky = 'nsew')
        self.homePage.tkraise()

这是 'App'

class App(ctk.CTk):
    def __init__(self, title, dim):

        # main setup
        super().__init__()
        self.title(title)
        self.geometry(f'{dim[0]}x{dim[1]}')
        self.minsize(dim[0],dim[1])
        

        os.chdir('/Users/mauri5566/Desktop/AST-CVE')

        self.widgetController = WidgetController(self)
        self.fileSystemController = FileSystemController(self)
        self.logicController = LogicController(self)
        self.navigationController = NavigationController(self)

        self.navigationController.start_from_home_page(self.fileSystemController, self.widgetController, self.logicController)

        self.mainloop()

App('AST-CVE', (1000,800))

以下代码显示了HomePage类的初始部分(继承自ctk.CTkFrame)。我收到以下错误:

bad screen distance ".!filesystemcontroller"

那是因为第三个参数应该是框架的宽度。但是我不需要这个,我只是想让类通过将控制器作为参数传递来访问控制器,我该怎么做?

这是 HomePage 类:

class HomePage(ctk.CTkFrame):
    def __init__(self,  navigationController: NavigationController,
                        fileSystemController: FileSystemController,
                        widgetController: WidgetController,
                        logicController: LogicController):
        super().__init__(navigationController, fileSystemController, widgetController, logicController)

为了清楚起见,这就是 ctk.CTkFrame 对象的结构:

class CTkFrame(CTkBaseClass):
    
    def __init__(self,
                 master: Any,
                 width: int = 200,
                 height: int = 200,
                 corner_radius: Optional[Union[int, str]] = None,
                 border_width: Optional[Union[int, str]] = None,

                 bg_color: Union[str, Tuple[str, str]] = "transparent",
                 fg_color: Optional[Union[str, Tuple[str, str]]] = None,
                 border_color: Optional[Union[str, Tuple[str, str]]] = None,

                 background_corner_colors: Union[Tuple[Union[str, Tuple[str, str]]], None] = None,
                 overwrite_preferred_drawing_method: Union[str, None] = None,
                 **kwargs):

python class tkinter arguments parameter-passing
1个回答
0
投票

您不应该将这些参数传递给

super.__init__
。没有必要,因为超类对它们一无所知。

© www.soinside.com 2019 - 2024. All rights reserved.