4.20/Qt5: 事件绑定,使用图片, 菜单, 对话框
-
事件绑定(
事件源.事件.connect(操作的函数)
)-
按钮 点击事件(
clicked
)btn1 = QPushButton('确定', self) btn1.move(50, 10) btn1.clicked.connect(self.btn1_action) # 按钮绑定 self.btn1_action
-
输入框 内容改变事件(
textChanged
)# 输入框 内容改变事件 self.input1 = QLineEdit(self) self.input1.setPlaceholderText('请输入手机号码') self.input1.move(50, 50) self.input1.textChanged.connect(self.input_text_action) # 输入框绑定 self.input_text_action 内容改变 事件 # 以下事件类似用法, 需要绑定就设置绑定事件就行
-
数值改变(
valueChanged
) -
下拉列表改变 (
currentTextChanged
) -
日期改变 (
dataChanged
)
-
-
图片的使用
-
设置窗口图标(
setWindowIcon(QIcon对象)
)# 1. 设置窗口图标 icon = QIcon('files/drinks.png') # 创建小图标对象 self.setWindowIcon(icon) # 作用于 窗口
-
显示图片(相当于创建
QLabel
标签 放图片)# 2. 显示图片 self.bg_label = QLabel(self) self.bg_label.setGeometry(0, 0, 800, 450) # 设置标签大小 self.bgpix = QPixmap('files/bg.jpg') self.bg_label.setPixmap(self.bgpix) # 在窗口的大小发送改变的时候会被自动调用 def resizeEvent(self, a0) -> None: # 获取到最新的窗口大小 w_size = self.size() # 对原图进行缩放 image = QImage('files\壁纸4.png') new_image = image.scaled(w_size.width(), w_size.height()) pix = QPixmap.fromImage(new_image) # 将显示图片的label进行缩放 self.bg_label.setGeometry(0, 0, w_size.width(), w_size.height()) self.bg_label.setPixmap(pix)
-
显示网络图片
# 下载图片 def download_image(): response = requests.get('https://ss1.bdstatic.com/70cFuXSh_Q1YnxGkpoWK1HF6hhy/it/u=158268377,3003399912&fm=26&gp=0.jpg') if response.status_code == 200: return response.content print('请求失败!', response) return None # 3.显示网络图片 # 下载图片 image_data = download_image() # 使用网络图片数据创建图片对象 image = QImage.fromData(image_data) # 直接传入 二进制图片数据 # 对图片进行缩放 image = image.scaled(200, 200) pix = QPixmap.fromImage(image) # 显示图片 btn = QLabel(self) btn.setGeometry(200, 100, 200, 200) btn.setPixmap(pix)
-
-
菜单
如果想要在窗口上添加菜单,那么窗口的类型必须是
QMainWindow
或QMainWindow
的子类-
普通菜单
-
第一步: 让窗口类继承
QMainWindow
class MainWindow(QMainWindow): # 创建窗口类 继承QMainWindow
-
第二步: 添加各种菜单
# 1. 获取当前窗口上菜单栏 menu_bar = self.menuBar() menu_bar.setNativeMenuBar(False) # mac系统需要添加这句话,否则菜单栏不显示 # 2. 菜单上添加菜单 file_menu = menu_bar.addMenu('file') # 添加一级菜单 file edit_menu = menu_bar.addMenu('&Edit') # 3.在菜单上添加选项 fa1 = QAction('new project', self) # 创建选项 fa1.triggered.connect(self.new_project) # 给选项绑定事件 fa2 = QAction(QIcon('files/naozhong.png'), 'Open', self) fa2.triggered.connect(self.open_action) fa2.setShortcut('ctrl+o') # 添加快捷键
-
第三步: 将选项添加到菜单上
# 第三步:将选项添加到菜单上 file_menu.addActions([fa1, fa2])
-
-
右键菜单(重写
contextMenuEvent
):在窗口上点鼠标右键的时候会被自动调用-
创建菜单对象
# 在窗口上点鼠标右键的时候会被自动调用 def contextMenuEvent(self, event) -> None: # 创建菜单对象 right_menu = QMenu(self)
-
在右键菜单上添加选项或者子菜单
# 在右键菜单上添加选项或者子菜单 a1 = QAction('copy', self) a2 = QAction('Paste', self) a3 = QAction('Cut', self) right_menu.addActions([a1, a2, a3])
-
让菜单显示在当前窗口鼠标所在的位置
# 让菜单显示在当前窗口鼠标所在的位置 right_menu.exec_(self.mapToGlobal(event.pos()))
-
-
-
对话框
1. 消息提示框对话框(``QMessageBox.消息类型(父标签, 标题, 内容 , 按钮)``)(``from PyQt5.QtWidgets import QMessageBox``) 1. 通知弹窗: (``information``) ```python message_btn = QPushButton('确定', self) # 创建一个 确认 按钮 message_btn.move(100, 20) message_btn.clicked.connect(self.show_message_box) # information事件 def show_message_box(self): # QMessageBox.information(父标签, 标题, 提示内容, QMessageBox类下的按钮) QMessageBox.information(self, '对话框', '中午好!', QMessageBox.Ok) ``` 2. 问题弹窗: (``question``) ```python # 值类 class Value: Yes = 16384 No = 65536 message_btn = QPushButton('确定', self) # 创建一个 确认 按钮 message_btn.move(100, 20) message_btn.clicked.connect(self.show_message_box) # information事件 def show_message_box(self): # QMessageBox.question(父标签, 标题, 提示内容, QMessageBox类下的按钮) result = QMessageBox.question(self, '问题', '是否删除改数据?', QMessageBox.Yes|QMessageBox.No) if result == Value.Yes: print('YES') else: print('NO') # 其他弹窗操作类似 ``` 3. 警告操作弹窗: (``warning``) 4. 危险操作弹窗: (``critical``) 5. 关于弹窗: (``critical``) 2. 消息输入框对话框(``输入框类型.getxxx``) 1. 消息输入框: (``QInputDialog.getText(父标签, '', '请输入手机号码')``) ```python message_btn = QPushButton('确定', self) # 创建一个 确认 按钮 message_btn.move(100, 20) message_btn.clicked.connect(self.show_message_box) # information事件 def show_message_box(self): result = QInputDialog.getText(self, '', '请输入名字:') print(result) # result 为输入的内容 ``` 2. 颜色输入框: (``QColorDialog.getColor()``) ```python message_btn = QPushButton('确定', self) message_btn.move(100, 20) message_btn.clicked.connect(self.show_message_box) # 按确认键 根据选择的颜色,改变界面背景颜色 self.color_label = QLabel('你好', self) pa = QPalette() pa.setColor(self.backgroundRole(), QColor(255, 0, 0)) self.setPalette(pa) self.autoFillBackground() # 当按钮被点击 触发 def show_message_box(self): result = QColorDialog.getColor() # 创建颜色输入框 对象 print(result.rgb()) # 得到的值是 QColor的对象 pa = QPalette() pa.setColor(self.backgroundRole(), result) # 将选择的颜色值 赋值给 背景颜色 self.setPalette(pa) self.autoFillBackground() ``` 3. 字体输入框: (``QFontDialog.getFont()``) 4. 打开文件输入框: (``QFileDialog.getOpenFileUrl()``)