def query(self, sql): # 创建一个新窗口,并设置其属性 new_window = QWidget(self) new_window.setWindowTitle("添加员工信息") new_window.setGeometry(100, 100, 800, 600) # 创建返回按钮并设置其属性 return_button = QPushButton("返回", new_window) return_button.setGeometry(10, 10, 50, 30) return_button.clicked.connect(new_window.close) # 执行 SQL 查询语句 self.cursor.execute(sql) # 获取查询结果并显示在表格中 rows = self.cursor.fetchall() self.table = QTableWidget() if rows: self.table.setRowCount(len(rows)) self.table.setColumnCount(len(rows[0])) for i, row in enumerate(rows): for j, col in enumerate(row): item = QTableWidgetItem(str(col)) self.table.setItem(i, j, item) self.table.setHorizontalHeaderLabels(["部门", "姓名", "性别", '职位', '工号', '状态']) self.table.horizontalHeader().setVisible(True) # 将表格添加到新窗口中 self.v_layout = QVBoxLayout(new_window) self.v_layout.addWidget(self.table) self.v_layout.addWidget(return_button) # 显示新窗口 new_window.setLayout(self.v_layout) new_window.show()在这个例子中如何在打开新窗口时关闭父窗口
时间: 2024-02-27 20:54:45 浏览: 78
PyQt5创建一个新窗口的实例
在这个例子中,可以在打开新窗口时关闭父窗口,方法如下:
1. 在父窗口中创建一个函数,用于打开查询窗口,并在打开查询窗口时将父窗口的引用传递给查询窗口。
```python
def open_query_window(self, sql):
# 创建一个新窗口
new_window = QWidget()
new_window.setWindowTitle("查询结果")
new_window.setGeometry(100, 100, 800, 600)
# 在打开查询窗口时将父窗口的引用传递给查询窗口
self.query_window = new_window
# 创建返回按钮并设置其属性
return_button = QPushButton("返回", new_window)
return_button.setGeometry(10, 10, 50, 30)
return_button.clicked.connect(new_window.close)
# 执行 SQL 查询语句
self.cursor.execute(sql)
# 获取查询结果并显示在表格中
rows = self.cursor.fetchall()
self.table = QTableWidget()
if rows:
self.table.setRowCount(len(rows))
self.table.setColumnCount(len(rows[0]))
for i, row in enumerate(rows):
for j, col in enumerate(row):
item = QTableWidgetItem(str(col))
self.table.setItem(i, j, item)
self.table.setHorizontalHeaderLabels(["部门", "姓名", "性别", '职位', '工号', '状态'])
self.table.horizontalHeader().setVisible(True)
# 将表格添加到新窗口中
self.v_layout = QVBoxLayout(new_window)
self.v_layout.addWidget(self.table)
self.v_layout.addWidget(return_button)
# 显示新窗口
new_window.setLayout(self.v_layout)
new_window.show()
# 隐藏父窗口
self.hide()
```
在这个函数中,我们在打开查询窗口时将父窗口的引用传递给 `self.query_window` 变量,并在关闭查询窗口时将其设置为 `None`。同时,在打开查询窗口时,我们隐藏了父窗口。
2. 在查询窗口中创建一个函数,用于关闭查询窗口并显示父窗口。
```python
def close_query_window(self):
# 关闭查询窗口
self.query_window.close()
# 显示父窗口
self.show()
```
在这个函数中,我们关闭了查询窗口,并通过 `self.show()` 方法显示了父窗口。
3. 在父窗口中创建一个按钮,用于关闭查询窗口并显示父窗口。
```python
# 在父窗口中创建一个按钮,用于关闭查询窗口并显示父窗口
close_query_button = QPushButton("关闭窗口", self)
close_query_button.setGeometry(10, 50, 100, 30)
close_query_button.clicked.connect(self.close_query_window)
```
在这个按钮的点击事件中,我们调用了 `self.close_query_window()` 方法,用于关闭查询窗口并显示父窗口。
完整代码示例:
```python
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QTableWidget, QTableWidgetItem, QVBoxLayout
class MainWindow(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
# 创建查询按钮
query_button = QPushButton("查询", self)
query_button.setGeometry(10, 10, 100, 30)
query_button.clicked.connect(lambda: self.open_query_window("SELECT * FROM employees"))
# 在父窗口中创建一个按钮,用于关闭查询窗口并显示父窗口
close_query_button = QPushButton("关闭窗口", self)
close_query_button.setGeometry(10, 50, 100, 30)
close_query_button.clicked.connect(self.close_query_window)
# 显示父窗口
self.setGeometry(100, 100, 800, 600)
self.setWindowTitle('员工信息管理系统')
self.show()
def open_query_window(self, sql):
# 创建一个新窗口
new_window = QWidget()
new_window.setWindowTitle("查询结果")
new_window.setGeometry(100, 100, 800, 600)
# 在打开查询窗口时将父窗口的引用传递给查询窗口
self.query_window = new_window
# 创建返回按钮并设置其属性
return_button = QPushButton("返回", new_window)
return_button.setGeometry(10, 10, 50, 30)
return_button.clicked.connect(new_window.close)
# 执行 SQL 查询语句
self.cursor.execute(sql)
# 获取查询结果并显示在表格中
rows = self.cursor.fetchall()
self.table = QTableWidget()
if rows:
self.table.setRowCount(len(rows))
self.table.setColumnCount(len(rows[0]))
for i, row in enumerate(rows):
for j, col in enumerate(row):
item = QTableWidgetItem(str(col))
self.table.setItem(i, j, item)
self.table.setHorizontalHeaderLabels(["部门", "姓名", "性别", '职位', '工号', '状态'])
self.table.horizontalHeader().setVisible(True)
# 将表格添加到新窗口中
self.v_layout = QVBoxLayout(new_window)
self.v_layout.addWidget(self.table)
self.v_layout.addWidget(return_button)
# 显示新窗口
new_window.setLayout(self.v_layout)
new_window.show()
# 隐藏父窗口
self.hide()
def close_query_window(self):
# 关闭查询窗口
self.query_window.close()
# 显示父窗口
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
main_window = MainWindow()
sys.exit(app.exec_())
```
阅读全文