/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"
source /Users/xxx/.zprofile
这条指令在上一条指令执行结束会有提示brew install pyqt@5
,这条指令执行结束,会有额外的python 3.9版本 (也是本次遇到的问题)
QMainWindow , 继承了QWidget,增添了toolbar 扩展功能等等。
QWidget , 面板
QDialog,对话框,主要是一些提示框,有“人机交互”的作用
if __name__ == '__main__':
app = QApplication(sys.argv)
# 1、操作ui的功能(定义应用对象,参数为系统参数)
w = QWidget()
# 2、操作ui的设计(大小,按钮,输入框等)
w.resize(250, 150)
# 2-1、配置ui窗口大小
w.move(300, 300)
# 2-2 配置ui窗口位置
w.setWindowTitle('Simple')
# 2-3 配置ui窗口的标题
w.show()
# 2-4 展示ui窗口
sys.exit(app.exec_())
# 2-5 app.exec_() 应用对象 执行
# ##***提示文本***## #
class PromptText(QWidget):
# 子类继承父类
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
QToolTip.setFont(QFont('SansSerif', 10))
# 这个静态方法设置了用于提示框的字体,这里使用10px大小的SansSerif字体。
self.setToolTip('This is a QWidget widget')
# 调用setTooltip()方法创建提示框;富文本格式。类似html语法
btn = QPushButton('Button', self)
# 创建按钮
btn.setToolTip('This is a QPushButton widget')
# 鼠标放上去会显示的内容
btn.resize(btn.sizeHint())
# 改变按钮大小
btn.move(300, 100)
# 配置按钮位置
self.setGeometry(300, 100, 600, 600)
# 配置窗口位置(300,100),以及大小(600*600)
self.setWindowTitle('Tooltips')
# 配置窗口上方的名字
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = PromptText()
sys.exit(app.exec_())
# ##***关闭窗口***## #
class CloseW(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
qbtn = QPushButton('Quit', self) # 创建了一个按钮。按钮是一个QPushButton类的实例。
# 构造方法的第一个参数是显示在button上的标签文本。第二个参数是父组件。
# 父组件是Example组件,它继承了QWiget类。
qbtn.clicked.connect(QCoreApplication.instance().quit)
# 点击信号传给了应用对象
qbtn.resize(qbtn.sizeHint())
qbtn.move(500, 50)
self.setGeometry(300, 100, 600, 600)
self.setWindowTitle('excise')
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = CloseW()
sys.exit(app.exec_())
信号:需要明确 发送者和 接收者是哪个
# ##***Message Box***## #
class MessageBox(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
qbtn = QPushButton('Quit', self)
# 创建了一个按钮。按钮是一个QPushButton类的实例。
# 构造方法的第一个参数是显示在button上的标签文本。第二个参数是父组件。
# 父组件是Example组件,它继承了QWiget类。
qbtn.clicked.connect(QCoreApplication.instance().quit)
qbtn.resize(qbtn.sizeHint())
qbtn.move(500, 50)
self.setGeometry(300, 100, 600, 600)
self.setWindowTitle('excise')
self.show()
def closeEvent(self, event):
# 重写了父类 Qwidget 中的close Event方法
reply = QMessageBox.question(self, 'Message',
"Are you sure to quit?", QMessageBox.Yes |
QMessageBox.No, QMessageBox.No)
if reply == QMessageBox.Yes:
event.accept()
else:
event.ignore()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = MessageBox()
sys.exit(app.exec_())
主要是这个statusBar 类中方法的使用
# ##***状态栏***## #
class StatusBar(QMainWindow):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.statusBar().showMessage('Ready')
# 主要是这个statusBar 类的使用
self.setGeometry(300, 300, 250, 150)
self.setWindowTitle('Statusbar')
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = StatusBar()
sys.exit(app.exec_())
# ##***工具栏***## #
class ToolBar(QMainWindow):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
exitAction = QAction('Exit', self)
exitAction.setShortcut('Ctrl+Z')
# 触发动作
exitAction.triggered.connect(qApp.quit)
# 触发动作
self.toolbar = self.addToolBar('Exit')
self.toolbar.addAction(exitAction)
self.setGeometry(300, 300, 300, 200)
self.setWindowTitle('Toolbar')
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = ToolBar()
sys.exit(app.exec_())
- 注意:mac里的菜单栏会显示在mac的上方
- menubar.setNativeMenuBar(False),可以让菜单显示在窗口,但有点儿丑
- Mac中的pyqt5 的菜单使用 需要 配备QAction 这个类,否则显示不出菜单
import sys
from PyQt5.QtWidgets import QMainWindow, QAction, QMenu, QApplication
class Example(QMainWindow):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
menubar = self.menuBar()
# menubar.setNativeMenuBar(False)
# mac中的菜单栏在上方,设置这个变量可以使他在下方
fileMenu = menubar.addMenu('file')
exitMenu = menubar.addMenu('edit')
impMenu = QMenu('a', self)
impAct = QAction('a-b', self)
impMenu.addAction(impAct)
newAct = QAction('b', self)
fileMenu.addAction(newAct)
fileMenu.addMenu(impMenu)
exitAct = QAction('g', self)
exitMenu.addAction(exitAct)
self.setGeometry(300, 300, 300, 200)
self.setWindowTitle('Submenu')
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
import sys
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import (QWidget, QLCDNumber, QSlider,
QVBoxLayout, QApplication)
class EventsSignals(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
lcd = QLCDNumber(self) # 显示一个LCD数字。
sld = QSlider(Qt.Horizontal, self) # 提供了一个水平滑动条。
vbox = QVBoxLayout()
vbox.addWidget(lcd)
vbox.addWidget(sld)
self.setLayout(vbox)
sld.valueChanged.connect(lcd.display)
# 滑块条的valueChanged信号和lcd数字显示的display槽连接在一起。
# 发送者是一个发送了信号的对象。
# 接受者是一个接受了信号的对象。
# 槽是对信号做出反应的方法。
self.setGeometry(300, 300, 250, 150)
self.setWindowTitle('Signal & slot')
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = EventsSignals()
sys.exit(app.exec_())