PyQt布局管理、菜单和工具栏

PyQt布局管理、菜单和工具栏

1 应用程序的图标

 # 设置窗口的位置和大小
 self.setGeometry(300, 300, 600, 500)
 # 设置窗口的标题
 self.setWindowTitle('Icon')
 # 设置窗口的图标,引用当前目录下的icon.png图片
 self.setWindowIcon(QIcon('icon.png'))

image-20220927180226292

2. 关闭窗口

btn.clicked.connect(QCoreApplication.instance().quit)

image-20220927181336717

3. 消息框

一般情况下,点击X表现关闭窗口。现在重写 closeEvent 函数,关闭窗口时会弹出一个消息框,让你确认是否关闭窗口。

def closeEvent(self, event):
    reply = QMessageBox.question(self,'Message',
    "Are you sure to quit?",QMessageBox.Yes | QMessageBox.No)

    if reply == QMessageBox.Yes:
    event.accept()
    else:
    event.ignore()

image-20220927181829745

4. 窗口显示在屏幕的中间

def center(self):
    # 获得窗口
    qr = self.frameGeometry()
    # 获得屏幕中心点
    cp = QDesktopWidget().availableGeometry().center()
    # 显示到屏幕中心
    qr.moveCenter(cp)
    self.move(qr.topLeft())

image-20220927182357167

5. 框布局 Boxlayout

用 QHBoxLayout 和 QVBoxLayout ,来分别创建横向布局和纵向布局。

def setup_UI(self):
    okButton = QPushButton("OK")
    cancelButton = QPushButton("Cancel")

    # 使用HBoxLayout和QVBoxLayout并添加伸展因子,在窗口的右下角显示两个按钮。
    hbox = QHBoxLayout()
    hbox.addStretch(1) # 平分空白间隔的,参数默认是0,用来增加间隔
    hbox.addWidget(okButton) # 用于向布局中添加控件
    hbox.addWidget(cancelButton)
    self.setLayout(hbox)
    # 创建一个水平布局和添加一个伸展因子和两个按钮。两个按钮前的伸展增加了一个可伸缩的空间。
    # 这将推动他们靠右显示。
    vbox = QVBoxLayout()
    vbox.addStretch(1)
    vbox.addLayout(hbox)

    # 创建一个垂直布局,并添加伸展因子,让水平布局显示在窗口底部
    self.setLayout(vbox)    # 用于向布局中添加子布局

    self.resize(300,300)
    self.setWindowTitle('Buttons')

image-20220927183234489

6. 表格布局 QGridLayout

表格布局将空间划分为行和列,可以使用 QGridLayout 类创建一个网格布局。

def setup_UI(self):
    grid = QGridLayout()
    self.setLayout(grid)

    names = ['Cls', 'Bck', '', 'Close',
             '7', '8', '9', '/',
             '4', '5', '6', '*',
             '1', '2', '3', '-',
             '0', '.', '=', '+']

    positions = [(i, j) for i in range(5) for j in range(4)]

    # 构建一个二维positions列表
    # name:依次遍历names赋值给name
    # position:依次遍历列表positions赋值(元组)给position
    for position, name in zip(positions, names):
        if name == '':
            continue
            button = QPushButton(name)
            # 创建按钮并使用addWidget()方法添加到布局中。
            grid.addWidget(button, *position)

            self.move(300, 150)
            self.setWindowTitle('Calculator')

image-20220927183913931

7. QGridLayout 可以在网格中跨越多个行或列

def setup_UI(self):
    title = QLabel('Title')
    author = QLabel('Author')
    review = QLabel('Review')

    titleEdit = QLineEdit()
    authorEdit = QLineEdit()
    reviewEdit = QTextEdit()

    grid = QGridLayout()
    grid.setSpacing(10) # 表示各个控件之间的上下间距

    grid.addWidget(title, 1, 0)
    grid.addWidget(titleEdit, 1, 1)

    grid.addWidget(author, 2, 0)
    grid.addWidget(authorEdit, 2, 1)

    grid.addWidget(review, 3, 0)
    grid.addWidget(reviewEdit, 3, 1, 5, 1)

    self.setLayout(grid)

    self.setGeometry(300, 300, 350, 300)
    self.setWindowTitle('Review')

image-20220927184617375

8. 主窗口

QMainWindow 类提供了一个主要的应用程序窗口,用它可以让应用程序添加状态栏,工具栏和菜单栏。

8.1 状态栏

状态栏用于显示状态信息。

def setup_UI(self):

    # QMainWindow类第一次调用statusBar()方法创建一个状态栏。
    # 后续调用返回的状态栏对象。showMessage()状态栏上显示一条消息。
    self.statusBar().showMessage('Ready')

    self.setGeometry(300, 300, 250, 150)
    self.setWindowTitle('Statusbar')

image-20220927185324656

8.2 菜单栏

菜单栏是常见的窗口应用程序的一部分。

def setup_UI(self):
    # QAction可以操作菜单栏,工具栏,或自定义键盘快捷键。
    # 下面三行,创建一个事件和一个特定的图标和一个“退出”的标签。
    # 然后,在定义该操作的快捷键。
    # 第三行创建一个鼠标指针悬停在该菜单项上时的提示。
    exitAction = QAction(QIcon('画布.png'), '&Exit', self)
    exitAction.setShortcut('Ctrl+Q')
    exitAction.setStatusTip('Exit application') # 提示信息
    exitAction.triggered.connect(qApp.quit)

    self.statusBar()

    # 创建一个菜单栏
    menubar = self.menuBar()
    # 添加菜单
    fileMenu = menubar.addMenu('&File')
    # 添加事件
    fileMenu.addAction(exitAction)

    self.setGeometry(300, 300, 300, 200)
    self.setWindowTitle('Menubar')

image-20220927185842067

8.3 工具栏

def setup_UI(self):
    exitAction = QAction(QIcon('画布.png'), 'Exit', self)
    exitAction.setShortcut('Ctrl+Q')
    exitAction.triggered.connect(qApp.quit)

    # 工具栏
    # 创建一个QAction事件。该事件有一个标签、图标和快捷键。
    self.toolbar = self.addToolBar('Exit')
    self.toolbar.addAction(exitAction)

    self.setGeometry(300, 300, 300, 200)
    self.setWindowTitle('Toolbar')

image-20220927190218844

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PyQt5中,可以使用QActionGroup类来实现菜单栏的单选功能。下面是一个示例代码: ```python from PyQt5.QtWidgets import QMainWindow, QApplication, QAction, QMenu, QActionGroup import sys class MenuBarDemo(QMainWindow): def __init__(self): super(MenuBarDemo, self).__init__() bar = self.menuBar() file = bar.addMenu("选择") group = QActionGroup(self) action1 = QAction("选项1", self) action1.setCheckable(True) action1.setChecked(True) action1.triggered.connect(self.actionTriggered) action2 = QAction("选项2", self) action2.setCheckable(True) action2.triggered.connect(self.actionTriggered) action3 = QAction("选项3", self) action3.setCheckable(True) action3.triggered.connect(self.actionTriggered) group.addAction(action1) group.addAction(action2) group.addAction(action3) file.addAction(action1) file.addAction(action2) file.addAction(action3) def actionTriggered(self): action = self.sender() print("选中了:", action.text()) if __name__ == '__main__': app = QApplication(sys.argv) mainWin = MenuBarDemo() mainWin.show() sys.exit(app.exec_()) ``` 在这个示例中,我们创建了一个菜单栏,并向其添加了一个"选择"的菜单项。然后,我们创建了一个QActionGroup对象,用于管理菜单项的单选功能。 接着,我们创建了三个QAction对象,并将它们添加到QActionGroup中。然后,我们将这些QAction对象添加到"选择"菜单中。 当用户选中某个菜单项时,会触发actionTriggered槽函数,并打印出选中的菜单项的文本。 这样,我们就实现了菜单栏的单选功能。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [【pyqt5学习】——菜单栏(QMenu())、工具栏QToolBar学习](https://blog.csdn.net/qq_45769063/article/details/124992097)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [PyQt5学习(一):布局管理+信号和槽关联+菜单栏与工具栏+打包资源包](https://blog.csdn.net/qq_45802081/article/details/117534692)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值