1. #!/usr/bin/env python
  2.  
  3. import sys
  4. from PyQt5.QtWidgets import (QApplication,
  5. QMainWindow,
  6. QWidget,
  7. QAction,
  8. QLabel,
  9. QTextEdit,
  10. QLineEdit,
  11. QPushButton,
  12. QGridLayout)
  13. from PyQt5.QtCore import Qt
  14. from PyQt5.QtGui import QIcon
  15.  
  16. class MainWindow(QMainWindow):
  17. def __init__(self, parent=None):
  18. super(MainWindow, self).__init__(parent, Qt.Window)
  19.  
  20. # 创建一个菜单栏:
  21. bar_menu = self.menuBar()
  22. # 为菜单栏添加文件菜单
  23. menu_file = bar_menu.addMenu('文件(&F)')
  24. # 为菜单栏添加编辑菜单
  25. menu_edit = bar_menu.addMenu('编辑(&E)')
  26.  
  27. # 添加一个动作:
  28. action_file = QAction('打开', self)
  29. # 为动作添加快捷建:
  30. # 值得注意的是在 MAC os 中 Ctrl 指的是 command 。
  31. action_file.setShortcut('Ctrl+O')
  32. # 为动作添加图标:
  33. action_file.setIcon(QIcon('open.png'))
  34. # 将点击动作的信号连接到 action_open 方法:
  35. action_file.triggered.connect(self.action_open)
  36. # 将打开动作添加到文件菜单中:
  37. menu_file.addAction(action_file)
  38.  
  39. action_copy = QAction('复制', self)
  40. action_copy.setIcon(QIcon('copy.png'))
  41. # 在 MAC os 中 Meta 才是 Ctrl 按钮:
  42. action_copy.setShortcut('Meta+C')
  43. action_copy.triggered.connect(self.action_copy)
  44. menu_edit.addAction(action_copy)
  45.  
  46. # 创建一个工具栏:
  47. bar_tool = self.addToolBar('工具栏')
  48. # 为工具栏添加按钮:
  49. bar_tool.addAction(action_file)
  50. # 为添加分割线:
  51. bar_tool.addSeparator()
  52. bar_tool.addAction(action_copy)
  53.  
  54. label_1 = QLabel('居右')
  55. # 设置Label的文字为居右并垂直居中:
  56. label_1.setAlignment(Qt.AlignRight | Qt.AlignVCenter)
  57. label_2 = QLabel('宽度因子为 1')
  58. label_3 = QLabel('居中')
  59. # 设置Label的文字为居中并垂直居中:
  60. label_3.setAlignment(Qt.AlignCenter | Qt.AlignVCenter)
  61. self.label_4 = QLabel('Label_4')
  62.  
  63. # 创建一个状态栏:
  64. status = self.statusBar()
  65. # 在状态栏显示信息:
  66. # 注意:显示信息时,组件不会显示
  67. # status.showMessage("Ready!")
  68. # 为状态栏添加一个stretch(拉伸因子)为1的Label
  69. status.addWidget(label_1, 1)
  70. status.addWidget(label_2, 1)
  71. status.addWidget(label_3, 3)
  72. status.addWidget(self.label_4, 1)
  73.  
  74. """
  75. 为 QMainWindow 添加其他组件的方法:
  76. 1. 将组件添加到一个布局中;
  77. 2. 创建一个 QWidget 设置为 1 中的布局;
  78. 3. 将 2 中的 QWidget 设为central widget 。
  79. """
  80.  
  81. line_edit = QLineEdit()
  82. # 为 line_edit 设置灰色提示文字:
  83. line_edit.setPlaceholderText('请输入...')
  84.  
  85. push_button = QPushButton()
  86. push_button.setText('确认')
  87.  
  88. text_edit = QTextEdit()
  89. text_edit.setPlaceholderText("编辑结果...")
  90.  
  91. # 创建一个网格布局:
  92. layout_grid = QGridLayout()
  93. layout_grid.addWidget(line_edit, 0, 0)
  94. layout_grid.addWidget(push_button, 0, 1)
  95. layout_grid.addWidget(text_edit, 1, 0, 2, 2)
  96.  
  97. # 创建一个 QWidget ,并将其布局设置为 layout_grid :
  98. widget = QWidget()
  99. widget.setLayout(layout_grid)
  100. # 将 widget 设为主窗口的 central widget :
  101. self.setCentralWidget(widget)
  102.  
  103. # 设置窗口大小:
  104. self.resize(500, 500)
  105. # 设置窗口标题:
  106. self.setWindowTitle(u"QMainWindow")
  107. # 显示窗口:
  108. self.show()
  109.  
  110. def action_open(self):
  111. self.label_4.setText("按下了打开按钮!")
  112.  
  113. def action_copy(self):
  114. self.label_4.setText("按下了复制按钮!")
  115.  
  116. if __name__ == "__main__":
  117. app = QApplication(sys.argv)
  118. window = MainWindow()
  119. sys.exit(app.exec_())

效果如下图:

【PyQt5 学习记录】005:QMainWindow 及状态栏、菜单栏和工具栏的更多相关文章

  1. 【PyQt5 学习记录】006:重写窗口事件及QMessageBox

    #!/usr/bin/env python import sys from PyQt5.QtWidgets import (QApplication, QMainWindow, QMessageBox ...

  2. 【PyQt5 学习记录】011:使用 QListWidet 创建列表

    使用 QListWidet 创建列表 作者: 八月未见 博客: https://www.cnblogs.com/jmtm/ 创建列表: list_widget = QListWidget() 插入项目 ...

  3. 【PyQt5 学习记录】010:QSplitter

    import sys from PyQt5.QtWidgets import (QApplication, QWidget, QSplitter, QTextEdit, QPushButton, QL ...

  4. 【PyQt5 学习记录】008:改变窗口样式之二

    super(MainWindow, self).__init__(parent, flags=Qt.Widget) 首先需要关闭窗口的默认样式,以方便定时想要的样式: self.setWindowFl ...

  5. 【PyQt5 学习记录】007:改变窗口样式之一

    class MainWindow(QMainWindow): 2 def __init__(self, parent=None): 3 super(MainWindow, self).__init__ ...

  6. 【PyQt5 学习记录】004:简单QThread笔记

    在文本编辑框中每隔几秒添加一行文本,代码如下: #!/usr/bin/python3 # -*- coding:utf-8 -*- import sys from PyQt5.QtWidgets im ...

  7. 【PyQt5 学习记录】001:第一个界面

    PyQt5 的安装很简单: pip3 install PyQt5 然后就是写一个最简单的界面试试手: import sys from PyQt5.QtWidgets import QApplicati ...

  8. 【PyQt5 学习记录】009:批量创建组件并查找

    这里需要在创建组件时使用 setObjectName() 为其添加 objectName 属性,再通过 findChild() 或者 findChildren() 函数来查找. 举个栗子,批量创建10 ...

  9. 【PyQt5 学习记录】003:水平布局和获取屏幕尺寸

    #!/usr/bin/python3 # -*- coding:utf-8 -*- import sys from PySide2.QtWidgets import (QApplication, QW ...

随机推荐

  1. java的几种定时任务

    本篇博文主要是讲述2.x 版本的quartz下的实现方案,1.x 版本的实现方式大致原理一致,但是具体的实现方式有些不一致,具体体现在获取  scheduler 这个类的方式上有些不同,这里不作过多的 ...

  2. vue 学前班001(基础概念)

    1  学习目标 通过这一节,你会学会: 1.目前前端技术使用的趋势 2.什么是MVVM 3.Vue.js的两大核心 4.Vue.js的适用场景  诞生背景 近几年来,得益于手机设备的普及和性能的提升, ...

  3. PHP之旅8 URL与表单

    表单 表单的出现让用户和后台主机有了直接的交互,网站开始变的‘动态起来’,在HTML的各个标记符中,与PHP关系最为紧密的要属表单标记符了,常见的表单标记符有<form>.<inpu ...

  4. php内核为变量的值分配内存的几个宏

    在php5.3之前,为某变量分配内存是用宏 MAKE_STD_ZVAL; 737 #define MAKE_STD_ZVAL(zv) \ # /Zend/zend.h738 ALLOC_ZVAL(zv ...

  5. 使用图片预加载,解决断网后无法从后台获取提示网络异常的logo图片的问题

    项目中有需求,断网后,显示小提示窗,里面包含网络异常提示语和异常小logo图片. 在实际操作时,遇到,断网后,无法从后台获取异常小logo图片. 我是才用图片预加载的方法解决这个问题的,解决方法如下: ...

  6. 从Windows下引导安装ubuntu

    Ubuntu引导安装 首先是安装前的准备工作 1.需要安装的 ubuntu系统的ISO镜像. 2.easyBCD引导软件 3.所在的Windows系统(本人win7下安装) 4.DiskGenius( ...

  7. Neko and Aki's Prank CodeForces - 1152D (括号序列,dp)

    大意: 将所有长度为2*n的合法括号序列建成一颗trie树, 求trie树上选出一个最大不相交的边集, 输出边集大小. 最大边集数一定不超过奇数层结点数. 这个上界可以通过从底层贪心达到, 所以就转化 ...

  8. (转)Python数据分析之numpy学习

    原文:https://www.cnblogs.com/nxld/p/6058572.html https://morvanzhou.github.io/tutorials/data-manipulat ...

  9. python实现二叉树的建立以及遍历(递归前序、中序、后序遍历,队栈前序、中序、后序、层次遍历)

    #-*- coding:utf-8 -*- class Node: def __init__(self,data): self.data=data self.lchild=None self.rchi ...

  10. [转] 使用 MVC 5 的 EF6 Code First 入门 系列

    译文:http://www.cnblogs.com/Bce-/category/573301.html 原文:http://www.asp.net/mvc/overview/getting-start ...