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

时间:2019-08-20 20:23:02

标签: python tkinter

我直接跳到我的问题。我正在用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()

当我尝试从面板border_button控制其他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'

请原谅我的英语,谢谢

0 个答案:

没有答案