单击 window B 上的按钮关闭 window A

Close window A by clicking a button on window B

我有 window 个带有一些图表和“下一步”按钮的 A。当用户按下按钮时,window B 打开并显示一些关于 window A 上的图表的问题。它还有一个按钮“完成”。按下“完成”后,window A 和 B 关闭。

问题:我没有让 window A 关闭并且控制台中没有错误消息。

Window答:

class Window_A(QDialog):

    def __init__(self, parent = None):
        super(Window_A, self).__init__(parent,flags=Qt.WindowMinimizeButtonHint|Qt.WindowCloseButtonHint)
        self.setWindowTitle("Window A")
        self.initUI()
    
    def initUI(self):
        # Load the images
        [...]

        #"NEXT button"
        self.b_next = QPushButton("NEXT")

        self.b_next.clicked.connect(self.open_next)

        #Layout
        [...]

  def close_win(self):
      self.close()
    
  def open_next(self):
      self.next= Window_B()
      self.next.show()

Window乙:

class Window_B(QDialog):

    def __init__(self):
        super(Window_B, self).__init__()
        self.setWindowTitle("Window_B")
        self.initUI()

    def initUI(self):
        #define text labels
        [...]

        #done button
        self.d_button = QPushButton("Done")
        self.d_button.clicked.connect(self.on_click)
        self.d_button.clicked.connect(lambda:self.close())
    

        #layout for text (questions)
        [...]

    def on_click(self):
        Window_A().close_win()

在您的 window_B 代码中,您不知道对正确 window_A 对象的引用。 所以你的行:

def on_click(self):
    Window_A().close_win()

创建一个新的Window_A对象,立即调用它的关闭函数,这个对象会尽快被垃圾回收。

您需要在 B 对象中传递对 A 的引用。 例如:

在window_A.py

    def open_next(self):
        self.next= Window_B()
        self.next.show()
        self.next.ref_to_close_father = self

在window_B.py

    def on_click(self):
        self.ref_to_close_father.close_win()

这样应该会更好(但是你的例子不可重现,所以可能还有其他问题)。

顺便说一句,

self.d_button.clicked.connect(lambda:self.close())

可能只是

self.d_button.clicked.connect(self.close)