单击 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)
我有 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)