我正在Tkinter GUI上工作,我想在其单独的类中添加窗口大小调整和定位控件。
我的结构是这样的:

class MainApp(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.winsize= WinSize(container, 700, 500, 650, 450, True, True)


我想WinSize设置主应用程序的几何以及句柄
WinSize类中的minsizeresizeable

class WinSize:

    def __init__(self, container, width, height, minx, miny, sizeablex, sizeabley):
        self.container = container
        self.width = width
        self.height = height
        self.minx = minx
        self.miny = miny
        self.sizeablex = sizeablex
        self.sizeabley = sizeabley
        self.ws = self.container.winfo_screenwidth()
        self.hs = self.container.winfo_screenheight()
        self.xpos = (self.ws / 2) - (self.width / 2)
        self.ypos = (self.hs / 2) - (self.height / 2)


我已经进行了广泛的搜索,但是没有找到关于如何为特定实例和/或Frame在WinSize类中实现这些实现的解决方案/指南。
我想使用同一类来设置大小和其他属性,以弹出将显示其他信息的消息/框架。
主要的GUI类来自@Bryan Oakley的著名示例:https://stackoverflow.com/a/7557028/7703610

如何从Tk调用geometryminsizeresizeable,而不必在WinSize类中再次继承Tk,然后将其应用于该特定实例?

最佳答案

有两种解决方案。您可以将窗口传递给WinSize()而不是容器,或者可以使用winfo_toplevel方法获取特定小部件的窗口。

第一个解决方案如下所示:

class MainApp(tk.Tk):

    def __init__(self, *args, **kwargs):
        tk.Tk.__init__(self, *args, **kwargs)
        ...
        self.winsize= WinSize(self, 700, 500, 650, 450, True, True)

class WinSize:

    def __init__(self, window, width, height, minx, miny, sizeablex, sizeabley):
        self.window = window
        ...
        self.window.geometry("%d%d+%d+%d" % (width, height, minx, miny))
        ...


第二种解决方案不需要更改主应用程序。只需将以下内容添加到WinSize

class WinSize:
    def __init__(...):
        ...
        window = self.container.winfo_toplevel()
        self.window.geometry("%d%d+%d+%d" % (width, height, minx, miny))

关于python - 使用类在另一个类中设置参数-Python,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44972710/

10-12 20:10