pyqt 实现主界面有一个按钮,点击这个按钮显示一个没有标题栏的弹窗widget, 当主界面移动时,重新点击按钮,弹窗widget和按钮相对位置保持不变
时间: 2024-10-05 07:03:12 浏览: 36
在PyQt中,你可以通过创建一个带有按钮的主界面窗口(通常是一个`QWidget`或`QMainWindow`),然后使用`QDialog`作为弹出窗口,结合窗口的特性如`move()`、`geometry()`和`parent()`来实现在按钮点击时显示弹窗,并保持其相对于主窗口的位置。这里是一个简单的示例:
```python
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout, QDialog, QDesktopWidget, QMessageBox
from PyQt5.QtGui import QPainter, QPixmap
class MainWindow(QWidget):
def __init__(self):
super(MainWindow, self).__init__()
self.button = QPushButton("Show Dialog", self)
self.button.clicked.connect(self.show_dialog)
layout = QVBoxLayout()
layout.addWidget(self.button)
self.setLayout(layout)
self.setWindowTitle("Main Window")
self.resize(400, 300)
def show_dialog(self):
dialog = CustomDialog(parent=self)
dialog.move(self.pos()) # 将弹窗移到主窗口的当前位置
dialog.exec() # 显示弹窗
class CustomDialog(QDialog):
def paintEvent(self, event):
painter = QPainter(self)
painter.drawPixmap(self.rect(), QPixmap('path_to_your_icon.png'), self.rect())
# 主函数
def main():
app = QApplication(sys.argv)
main_window = MainWindow()
main_window.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
```
在这个代码中,当`show_dialog`方法被触发时,`CustomDialog`窗口会被创建并移动到主窗口当前的位置(`self.pos()`获取主窗口的位置信息)。`paintEvent`是用来绘制窗口图标,你可以替换为你需要的图片路径。
阅读全文