如何用一个按钮显示/隐藏分隔的多个窗口边框?

2024-10-03 02:37:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我直接跳到我的问题上来。我正在用tkinter编写基本的ui代码。我得到了分离的多窗口设计。所以当代码执行时,会出现一些小窗口,但我想把它们都控制在一个面板窗口中。在这种情况下,我需要控制所有窗口(包括控制面板窗口)边框隐藏/显示属性。这是我的密码:

    from tkinter import *

    no_border = True

    class ControlPanel(Tk): 

        def __init__(self, posx=0, posy=0):
            super().__init__()

            global no_border

            self.posx = posx
            self.posy = posy
            self.no_border = True

            self.title("Control Panel")
            self.attributes("-topmost", "true")
            self.geometry("+{}+{}".format(self.posx, self.posy))

            self.overrideredirect(no_border)

            self.border_button = Button(self, text = "Border", command = lambda: Window1.borderShowHide(Window1))
            self.border_button.pack()

            self.exit_button = Button(self, text = "Exit", command = self.destroy)
            self.exit_button.pack()

        @classmethod
        def borderShowHide(cls, self):

            global no_border

            if no_border:
                no_border = False
            else:
                no_border = True

            self.overrideredirect(no_border)


    class WindowAttributes(Toplevel):

        def __init__(self, master=None, windowTitle=None, posx=0, posy=0):

            super().__init__(master)

            global no_border

            self.posx = posx
            self.posy = posy
            self.no_border = True

            self.title(windowTitle)
            self.attributes("-topmost", "true")
            self.geometry("+{}+{}".format(self.posx, self.posy))

            self.overrideredirect(no_border)

        @classmethod
        def borderShowHide(cls, self):

            global no_border

            if no_border:
                no_border = False
            else:
                no_border = True

            self.overrideredirect(no_border)


    class Window1(WindowAttributes):

        def __init__(self, *args):

            super().__init__(*args)

            self.text_label = Label(self, text = "Test 1")
            self.text_label.pack()


     class Window2(WindowAttributes):

        def __init__(self, *args):

            super().__init__(*args)

            self.text_label = Label(self, text = "Test 2")
            self.text_label.pack()


    def main():
        control_panel = ControlPanel(1225, 50)
        window_1 = Window1(control_panel, "Window 1", 0, 50)
        window_2 = Window2(control_panel, "Window 2", 0, 500)


        control_panel.mainloop()

    if __name__ == "__main__":
        main()

当我试图从面板边框按钮控制其他windows边框属性时,我得到以下错误:

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Users\Lenovo- PC\AppData\Local\Programs\Python\Python36\lib\tkinter\__init__.py", line 1702, in __call__
    return self.func(*args)
  File "C:\Users\Lenovo-PC\Desktop\interface.py", line 22, in <lambda>
self.border_button = Button(self, text = "Border", command = lambda: Window1.borderShowHide(Window1))
  File "C:\Users\Lenovo-PC\Desktop\interface.py", line 69, in borderShowHide
self.overrideredirect(no_border)
  File "C:\Users\Lenovo-PC\AppData\Local\Programs\Python\Python36\lib\tkinter\__init__.py", line 1944, in wm_overrideredirect
    return self._getboolean(self.tk.call(
AttributeError: 'bool' object has no attribute '_getboolean'

原谅我的英语,谢谢你


Tags: notextinselftrueinitdefargs