4.20Qt5 事件绑定,使用图片, 菜单, 对话框

4.20/Qt5: 事件绑定,使用图片, 菜单, 对话框

  1. 事件绑定(事件源.事件.connect(操作的函数))

    1. 按钮 点击事件(clicked)

      btn1 = QPushButton('确定', self)
      btn1.move(50, 10)
      btn1.clicked.connect(self.btn1_action)  # 按钮绑定 self.btn1_action
      
    2. 输入框 内容改变事件(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 内容改变 事件
      
      # 以下事件类似用法, 需要绑定就设置绑定事件就行
      
    3. 数值改变(valueChanged)

    4. 下拉列表改变 (currentTextChanged)

    5. 日期改变 (dataChanged)

  2. 图片的使用

    1. 设置窗口图标(setWindowIcon(QIcon对象))

      # 1. 设置窗口图标
      icon = QIcon('files/drinks.png')  # 创建小图标对象
      self.setWindowIcon(icon)  # 作用于 窗口
      
    2. 显示图片(相当于创建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)
      
    3. 显示网络图片

      # 下载图片
      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)
      
  3. 菜单

    ​ 如果想要在窗口上添加菜单,那么窗口的类型必须是QMainWindowQMainWindow的子类

    1. 普通菜单

      1. 第一步: 让窗口类继承QMainWindow

        class MainWindow(QMainWindow):  # 创建窗口类 继承QMainWindow
        
      2. 第二步: 添加各种菜单

        # 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')       # 添加快捷键
        
        
        
      3. 第三步: 将选项添加到菜单上

        # 第三步:将选项添加到菜单上
        file_menu.addActions([fa1, fa2])
        
    2. 右键菜单(重写contextMenuEvent):在窗口上点鼠标右键的时候会被自动调用

      1. 创建菜单对象

        # 在窗口上点鼠标右键的时候会被自动调用
        def contextMenuEvent(self, event) -> None:
            # 创建菜单对象
            right_menu = QMenu(self)
        
      2. 在右键菜单上添加选项或者子菜单

        # 在右键菜单上添加选项或者子菜单
            a1 = QAction('copy', self)
            a2 = QAction('Paste', self)
            a3 = QAction('Cut', self)
            right_menu.addActions([a1, a2, a3])
        
      3. 让菜单显示在当前窗口鼠标所在的位置

        # 让菜单显示在当前窗口鼠标所在的位置
        	right_menu.exec_(self.mapToGlobal(event.pos()))
        
  4. 对话框

    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()``)
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值