Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用一个类在另一个类(Python)中设置参数_Python_Tkinter - Fatal编程技术网

使用一个类在另一个类(Python)中设置参数

使用一个类在另一个类(Python)中设置参数,python,tkinter,Python,Tkinter,我正在开发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=T

我正在开发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类中的
minsize
可调整大小的

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)
我一直在广泛地搜索,没有找到关于如何在
WinSize
类中为特定实例和/或框架实现这些功能的解决方案/指导。 我想使用相同的类来设置弹出消息/框架的大小和其他属性,以显示其他信息。 主要GUI类取自@Bryan Oakley的著名示例:


如何从Tk调用
几何体
minsize
可调整大小的
,而不必在WinSize类中再次继承Tk,然后将其应用于特定实例?

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

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

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))

谢谢你,布莱恩·奥克利。喜欢你的解决方案多么简单。希望你做了一套视频教程,并正确地教我们其他人。只是一个简单的问题。。。在第一个示例中,
self
是否传递到
窗口
变量中?