Skip to content

PyQt生成窗口的方式

  • 在Qt中,生成窗口有三种方式:QWidget、QMainWidget、QDialog

一、QWidget

  • 控件和窗口的父类,自由度高(什么东西都没有),没有划分菜单、工具栏、状态栏、主窗口等区域

1. 使用示例

python
import sys
from PyQt5.QtWidgets import (QApplication, QWidget, QLabel)


class MyWindow(QWidget):
    def __init__(self):
        super(MyWindow,self).__init__()
        self.init_ui()

    def init_ui(self):
        self.setWindowTitle("QWidget窗口")
        self.resize(400,300)
        label = QLabel("这是QWidget窗口")
        label.setStyleSheet("font-size:36px;color:gray")
        label.setParent(self)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    win = MyWindow()
    win.show()
    app.exec_()

2. 样式演示

QQ20250615-205908

二、QMainWidget

  • 是QWidget的子类,包含菜单栏、工具栏、状态栏、标题栏等,中间部分则为主窗口区域

1. 使用示例

python
import sys
from PyQt5.QtWidgets import (QApplication, QLabel, QMainWindow)


class MyWindow(QMainWindow):
    def __init__(self):
        super(MyWindow,self).__init__()
        self.init_ui()

    def init_ui(self):
        self.resize(400,300)
        self.setWindowTitle("QMainWidget窗口")

        label = QLabel("这是QMainWindow窗口")
        label.setStyleSheet("font-size:36px;color:gray")

        # 调用父类中的menuBar,从而对菜单栏进行操作
        menu = self.menuBar()
        # 如果是Mac的话,菜单不会在Window中显示而是在屏幕顶部系统菜单栏位置
        # 下面一行代码使得Mac也按照Windows的那种方式在Window中显示菜单栏
        menu.setNativeMenuBar(False)

        file_menu = menu.addMenu("文件")
        file_menu.addAction("新建")
        file_menu.addAction("打开")
        file_menu.addAction("保存")

        edit_menu = menu.addMenu("编辑")
        edit_menu.addAction("复制")
        edit_menu.addAction("粘贴")
        edit_menu.addAction("剪切")

        # 设置中心内容显示
        self.setCentralWidget(label)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    win = MyWindow()
    win.show()
    app.exec_()

2. 样式演示

QQ20250615-211801

QQ20250615-211403

三、QDialog

  • 对话框窗口的基类

1. 使用示例

python
import sys
from PyQt5.QtWidgets import (QApplication, QDialog, QPushButton)


class MyWindow(QDialog):
    def __init__(self):
        super(MyWindow,self).__init__()
        self.init_ui()

    def init_ui(self):
        self.setWindowTitle("QDialog窗口")
        self.resize(400,300)
        btn_ok = QPushButton("确定",self)
        btn_ok.setStyleSheet("background-color:pink;")
        btn_ok.setGeometry(150,100,100,30)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    win = MyWindow()
    win.show()
    app.exec_()

2. 样式演示

QQ20250615-213213