PyQt 主窗口(QMainWindow)主要包括五大部分:
下面我写了一个简单的例子,只实现了极少数的功能,仅供参考。后续会详细介绍主窗口(QMainWindow)程序各个部分的写法。推荐在浏览器中打开并横屏查看代码。
import sys from PyQt5.QtWidgets import * from PyQt5.QtGui import QColor, QFont, QIcon, QKeySequence from PyQt5.QtCore import Qt, QDate, QTime, QDateTime, QTimer from PyQt5.QtPrintSupport import QPrinter, QPrintDialog, QPrintPreviewDialog import os
class MainWindow(QMainWindow):
def __init__(self, parent = None): super().__init__(parent) self.initUI()
def initUI(self): self.setWindowTitle("主窗口示例") #self.resize(400,250) self.setup_centralWidget() self.setup_dockWidget() self.setup_statusBar()
self.createActions() self.setup_menuBar() self.setup_toolBar()
def setup_centralWidget(self): #设置主窗口中心部件 self.textEdit = QTextEdit()#初始化时换行符无效 self.textEdit.setText("第一行\n第二行\n第三行\n") #self.textEdit.selectAll() self.setCentralWidget(self.textEdit)#指定主窗口中心部件
def createActions(self): #创建动作 #打开文件动作 self.fileOpenAction = QAction(QIcon("open.png"),"&Open",self) # 动作在self中可用 self.fileOpenAction.setShortcut(QKeySequence.Open)#设置标准化快捷键 #self.fileOpenAction.setShortcut("Ctrl+O")# windows 系统下等效于 self.fileOpenAction.setToolTip("打开文件")#工具栏提示文本 self.fileOpenAction.setStatusTip("打开现有的文件")#状态栏提示文本 self.fileOpenAction.triggered.connect(self.fileOpen)
#文件另存为动作 self.fileSaveAsAction = QAction(QIcon("save.png"),"SaveAs",self) # 动作在self中可用 self.fileSaveAsAction.setShortcut(QKeySequence.SaveAs)#设置标准化快捷键 #windows 系统下无快捷键 self.fileSaveAsAction.setToolTip("另存为")#工具栏提示文本 self.fileSaveAsAction.setStatusTip("文件另存为")#状态栏提示文本 self.fileSaveAsAction.triggered.connect(self.fileSaveAs)
#动作分隔符 self.separator = QAction(self) self.separator.setSeparator(True)
def setup_menuBar(self): #文件菜单 self.fileMenu = self.menuBar().addMenu("&File") self.fileMenu.addAction(self.fileOpenAction) self.fileMenu.addAction(self.fileSaveAsAction) #self.fileMenu.addAction(self.separator)
def fileOpen(self): fileName, filetype = QFileDialog.getOpenFileName(self, "打开文件", os.getcwd(), # 设定起始路径为当前目录 "Text Files (*.txt)") # 设置文件扩展名过滤,用双分号间隔 if fileName != "": with open(fileName) as f: self.textEdit.setText(f.read())
def fileSaveAs(self): fileName, filetype = QFileDialog.getSaveFileName(self, "文件另存为", os.getcwd(), # 起始路径 "Text Files (*.txt);;Html Files (*.html)") # 设置文件扩展名过滤,用双分号间隔 if fileName =="": return if filetype=="Text Files (*.txt)": with open(fileName,"w") as f: f.write(self.textEdit.toPlainText()) elif filetype=="Html Files (*.html)": with open(fileName,"w") as f: f.write(self.textEdit.toHtml()) def setup_toolBar(self): fileToolbar = self.addToolBar("File")#添加工具条;可依次添加多个工具条 fileToolbar.addActions((self.fileOpenAction,self.fileSaveAsAction,self.separator))#添加动作 tb_label1 = QLabel("选择什么东东") self.cb = QComboBox() self.cb.addItems(("红","绿","蓝")) fileToolbar.addWidget(tb_label1)#工具条添加部件 fileToolbar.addWidget(self.cb)#工具条添加部件 #...... def setup_dockWidget(self): #设置停靠窗口 self.logDockWidget = QDockWidget("log",self) self.logDockWidget.setAllowedAreas(Qt.LeftDockWidgetArea | Qt.RightDockWidgetArea) self.listWidget = QListWidget() self.logDockWidget.setWidget(self.listWidget) self.addDockWidget(Qt.RightDockWidgetArea, self.logDockWidget)#添加停靠窗口
def setup_statusBar(self): #配置状态栏 self.dateLabel = QLabel() self.dateLabel.setFrameStyle(QFrame.StyledPanel | QFrame.Sunken) self.dateLabel.setText(QDate.currentDate().toString())
self.timeLabel = QLabel() self.timeLabel.setFrameStyle(QFrame.StyledPanel | QFrame.Sunken) self.timeLabel.setText(QTime.currentTime().toString()) self.statusBar().addPermanentWidget(self.dateLabel) self.statusBar().addPermanentWidget(self.timeLabel)
datetime = QDateTime.currentDateTime().toString() self.statusBar().showMessage(datetime,3000) #状态栏在3000ms内显示信息 self.statusBar().showMessage("ready")#状态栏显示信息 timer = QTimer(self)#创建计时器#self timer.timeout.connect(self.updateBySecond) # 计时器超时信号接到用于更新界面的槽 timer.start(1000)#每1000ms发射超时信号 def updateBySecond(self): self.timeLabel.setText(QTime.currentTime().toString()) self.dateLabel.setText(QDate.currentDate().toString())
if __name__ == '__main__': app = QApplication(sys.argv) mw = MainWindow() mw.show() sys.exit(app.exec_())
本文分享自 Python可视化编程机器学习OpenCV 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!