Pyside6 QPushButton

news2024/11/18 18:45:26

Pyside6 QPushButton

  • QPushButton使用
    • QPushButton继承关系
    • QPushButton的函数(Function)和信号(Signal)
      • QPushButton信号
  • QPushButton例程
    • 界面设计
    • clicked信号测试
    • pressed信号测试
    • released信号测试
    • toggled信号测试
    • 按键长按测试
    • 按键长按间隔测试
    • 完整程序
      • 界面程序
      • 主程序

按键或命令按键可能是任何图形用户界面中最常用的小部件。按下(点击)按键可以使计算机执行某些操作,或回答一个问题。Pyside6给用户提供了按键控件,用户可以设置按键的触发条件来实现需要的功能。

QPushButton使用

QPushButton继承关系

在这里插入图片描述
可以看到QPushButton的父类是QAbstractButton,也就是说QPushButton的一些属性是继承于QAbstractButton。

QPushButton的函数(Function)和信号(Signal)

在Pyside6中每个控件都有自己的函数和信号,函数通常是设置控件的一些状态,比如设置控件的文本名字、控件的颜色、控件的大小以及控件的一些特殊属性等。信号是当一些控件发生某些动作或者改变时发出的通知,例如点击了按钮,修改文本框内容等。除了通知程序发生了什么,信号也可以用来传递额外的信息。
更多关于QPushButton的资料可以通过以下两个网址进行查看
https://doc.qt.io/qtforpython-6/PySide6/QtWidgets/QAbstractButton.html
https://doc.qt.io/qtforpython-5/PySide2/QtWidgets/QPushButton.html

QPushButton信号

Pyside6的QPushButton控件提供了4个信号函数给用户使用,分别是clicked、pressed、released和toggled,下面就来了解一下这4个信号的不同之处。

信号作用
clicked按键松开时触发,如果按键按下后鼠标拖动到按键区域以外然后释放则不会触发
pressed按键按下时触发
released按键松开时触发,即使按键按下后鼠标拖动到按键区域以外也会触发
toggled需要设置 setCheckable(true) 后再单击按钮才会触发该信号

QPushButton例程

本节例程中我们需要设置6个按键

  • 按键1绑定的信号是clicked,测试按键松开时触发信号
  • 按键2绑定的信号是pressed,测试按键按下时触发信号
  • 按键3绑定的信号是released,测试按键松开时触发信号
  • 按键4绑定的信号是toggled,测试按键点击时的状态
  • 按键5绑定的信号是clicked,同时设置按键为长按触发
  • 按键6绑定的信号是clicked,同时设置按键为长按后每个2s触发一次

界面设计

我们打开designer软件,创建一个Main Window的主界面,然后在主界面中添加6个按键。
在这里插入图片描述
创建完成后将ui界面保存为button.ui,然后打开cmd命令行,输入pyside6-uic button.ui -o button_ui.py,将ui界面编译成python文件。然后编写界面初始化文件,具体可以参考该文章Pyside6 安装和简单界面开发

clicked信号测试

clicked是当按键被按下而且松开后才会触发,所以当我们点击按键然后松开按键后才会触发clicked信号。

self.ui.pushButton.clicked.connect(self.pushButton1_func) # 按键1绑定clicked信号
def pushButton1_func(self):
        print("按键1按下")

在这里插入图片描述

pressed信号测试

pressed是当按键被按下后就会触发,所以当我们点击按键就会触发pressed信号。

self.ui.pushButton_2.pressed.connect(self.pushButton2_func) # 按键2绑定clicked信号
def pushButton2_func(self):
        print("按键2按下")

在这里插入图片描述

released信号测试

released是当按键被按下而且松开后才会触发,而且当按键被按下后,鼠标拖动到按键区域以外也会触发released信号。

self.ui.pushButton_3.released.connect(self.pushButton3_func) # 按键3绑定released信号
def pushButton3_func(self):
        print("按键3按下")

在这里插入图片描述

toggled信号测试

toggled信号是按键被按下而且松开后才会触发,并且会返回按键触发后的状态。toggled信号可以将按键设置成开关量,每点击一次状态就翻转一次。

self.ui.pushButton_4.toggled.connect(self.pushButton4_func) # 按键4绑定toggled信号
self.ui.pushButton_4.setCheckable(True)                     # 设置按键4的checkabel属性为使能
def pushButton4_func(self,check):
        print("按键4按下 %d " % check)    

在这里插入图片描述

按键长按测试

Pyside6的QPushButton控件支持长按触发,只要按键被按下后不松手就会一直触发。

self.ui.pushButton_5.clicked.connect(self.pushButton5_func) # 按键5绑定clicked信号
self.ui.pushButton_5.setAutoRepeat(True)                    # 按键5设置长按触发
def pushButton5_func(self):
        print("按键5按下")

在这里插入图片描述

按键长按间隔测试

将按键设置为长按触发,并且设置触发时间间隔为2s触发一次。

self.ui.pushButton_6.clicked.connect(self.pushButton6_func) # 按键6绑定clicked信号
self.ui.pushButton_6.setAutoRepeat(True)                    # 按键6设置长按触发
self.ui.pushButton_6.setAutoRepeatInterval(2000)            # 触发间隔设置为2s
def pushButton6_func(self):
        print("按键6按下")
        print(datetime.datetime.now()) # 打印出触发间隔时间

在这里插入图片描述

完整程序

界面程序

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>MainWindow</class>
 <widget class="QMainWindow" name="MainWindow">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>317</width>
    <height>248</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>MainWindow</string>
  </property>
  <widget class="QWidget" name="centralwidget">
   <layout class="QVBoxLayout" name="verticalLayout_2">
    <item>
     <widget class="QFrame" name="frame">
      <property name="frameShape">
       <enum>QFrame::StyledPanel</enum>
      </property>
      <property name="frameShadow">
       <enum>QFrame::Raised</enum>
      </property>
      <layout class="QHBoxLayout" name="horizontalLayout">
       <item>
        <layout class="QVBoxLayout" name="verticalLayout">
         <item>
          <widget class="QPushButton" name="pushButton">
           <property name="text">
            <string>按键1</string>
           </property>
          </widget>
         </item>
         <item>
          <widget class="QPushButton" name="pushButton_2">
           <property name="text">
            <string>按键2</string>
           </property>
          </widget>
         </item>
         <item>
          <widget class="QPushButton" name="pushButton_3">
           <property name="text">
            <string>按键3</string>
           </property>
          </widget>
         </item>
         <item>
          <widget class="QPushButton" name="pushButton_4">
           <property name="text">
            <string>按键4</string>
           </property>
          </widget>
         </item>
         <item>
          <widget class="QPushButton" name="pushButton_5">
           <property name="text">
            <string>按键5</string>
           </property>
          </widget>
         </item>
         <item>
          <widget class="QPushButton" name="pushButton_6">
           <property name="text">
            <string>按键6</string>
           </property>
          </widget>
         </item>
        </layout>
       </item>
      </layout>
     </widget>
    </item>
   </layout>
  </widget>
  <widget class="QMenuBar" name="menubar">
   <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
     <width>317</width>
     <height>22</height>
    </rect>
   </property>
  </widget>
  <widget class="QStatusBar" name="statusbar"/>
 </widget>
 <resources/>
 <connections/>
</ui>

主程序

# Import Qt libraries
from PySide6.QtWidgets import *
from PySide6.QtCore import QFile
# Import UI developed in Qt Creator
from button_ui import Ui_MainWindow  # 导入界面
# Import PseudoSensor
# Import system tools and datetime
import sys
import statistics
import time
import datetime
# Create and start the Qt application
class MainWindow(QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        
        # 设置界面为用户设计的界面
        self.ui = Ui_MainWindow() 
        self.ui.setupUi(self) 
        self.ui.pushButton.clicked.connect(self.pushButton1_func) # 按键1绑定clicked信号

        self.ui.pushButton_2.pressed.connect(self.pushButton2_func) # 按键2绑定pressed信号

        self.ui.pushButton_3.released.connect(self.pushButton3_func) # 按键3绑定released信号

        self.ui.pushButton_4.toggled.connect(self.pushButton4_func) # 按键4绑定toggled信号
        self.ui.pushButton_4.setCheckable(True)                     # 设置按键4的checkabel属性为使能

        self.ui.pushButton_5.clicked.connect(self.pushButton5_func) # 按键5绑定clicked信号
        self.ui.pushButton_5.setAutoRepeat(True)                    # 按键5设置长按触发
        
        self.ui.pushButton_6.clicked.connect(self.pushButton6_func) # 按键6绑定clicked信号
        self.ui.pushButton_6.setAutoRepeat(True)                    # 按键6设置长按触发
        self.ui.pushButton_6.setAutoRepeatInterval(2000)            # 触发间隔设置为2s
        
    def pushButton1_func(self):
        print("按键1按下")

    def pushButton2_func(self):
        print("按键2按下")

    def pushButton3_func(self):
        print("按键3按下")

    def pushButton4_func(self,check):
        print("按键4按下 %d " % check)    

    def pushButton5_func(self):
        print("按键5按下")

    def pushButton6_func(self):
        print("按键6按下")
        print(datetime.datetime.now()) # 打印出触发间隔时间
        
    def closeAndExit(self):
        sys.exit()

if __name__ == "__main__":
    app = QApplication(sys.argv) # 初始化QApplication

    # 初始化界面并显示界面
    window = MainWindow() 
    window.setFixedSize(window.width(), window.height())
    window.show() 

    sys.exit(app.exec())

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1072746.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023年【陕西省安全员C证】新版试题及陕西省安全员C证考试试卷

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 陕西省安全员C证新版试题是安全生产模拟考试一点通总题库中生成的一套陕西省安全员C证考试试卷&#xff0c;安全生产模拟考试一点通上陕西省安全员C证作业手机同步练习。2023年【陕西省安全员C证】新版试题及陕西省安…

Idea本地跑flink任务时,总是重复消费kafka的数据(kafka->mysql)

1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 Idea中执行任务时&#xff0c;没法看到JobManager的错误&#xff0c;以至于我以为是什么特殊的原因导致任务总是反复消费。在close方法中&#xff0c;增加日志&#xff0c;发现jdbc连接被关闭了。 重新…

通讯网关软件019——利用CommGate X2OPCUA实现OPC UA访问Oracle服务器

本文介绍利用CommGate X2OPCUA实现OPC UA访问ORACLE数据库。CommGate X2OPCUA是宁波科安网信开发的网关软件&#xff0c;软件可以登录到网信智汇(http://wangxinzhihui.com)下载。 【案例】如下图所示&#xff0c;实现上位机通过OPC UA来获取ORACLE数据库的数据。 【解决方案】…

windows docker desktop配置加速地址

目录 为什么常见加速地址在docker desktop上配置 为什么 https://hub.docker.com 是官方的镜像仓库地址&#xff0c;但是它的服务器地址是在国外&#xff0c;有时候访问和下载的速度差强人意。不过好在&#xff0c;我们可以进行远程仓库的设置&#xff0c;将仓库镜像地址设置为…

2023,全网最真实的自动化测试学习路线,看不懂来打我!

随着测试行业的发展&#xff0c;“会代码”越来越成为测试工程师的一个标签。打开各大招聘网站&#xff0c;测试工程师月薪一万以上基本都有一个必备技能&#xff0c;那就是自动化测试。那么自动化测试到底难不难呢&#xff1f;下面我将会将我的经历讲给大家听&#xff0c;希望…

1556. 千位分隔数

1556. 千位分隔数 C代码&#xff1a; char * thousandSeparator(int n){char* str (char*)malloc(sizeof(char) * 20);int len sprintf(str, "%d", n);int len2 0;if (len % 3 0) {len2 len len / 3 - 1;} else {len2 len len / 3;}char* ans (char*)malloc…

FTP服务器搭建

操作系统系列文章 VMware Workstation Player 17 免费下载安装教程 VMware Workstation 17 Pro 免费下载安装教程 windows server 2012安装教程 Ubuntu22.04.3安装教程 FTP服务器搭建 FTP服务器搭建教程 操作系统系列文章前言基本概念介绍一、安装FTP服务二、配置ftp服务三、建…

androidStudio第一次运行报错无法运行

安卓第一次运行失败 大家好&#xff0c;我使用androidStudio新建了一个测试demo第一次运行&#xff0c;结果失败了&#xff0c;显示如下图&#xff1a; 然后查了各种方法&#xff0c;都是没有用&#xff0c;最后 历经困难&#xff0c;还是找到了&#xff0c;原来是 gradle的依…

电子招标投标系统 —采购招投标管理一体化系统-

项目说明 随着公司的快速发展&#xff0c;企业人员和经营规模不断壮大&#xff0c;公司对内部招采管理的提升提出了更高的要求。在企业里建立一个公平、公开、公正的采购环境&#xff0c;最大限度控制采购成本至关重要。符合国家电子招投标法律法规及相关规范&#xff0c;以及审…

Visual Studio Code配置C/C++开发环境

C/C开发中的IDE非常多&#xff0c;网上有推荐安装Visual Studio 2019/2020/2022。但是登录官方网址下载&#xff0c;此软件体积非常大(8G以上)&#xff0c;且企业版、专业版会收费。 因此&#xff0c;我们推荐大家可以尝试通过Visual Studio Code来配置C/C开发环境 环境准备 Mi…

WorkPlus定制化的局域网会议软件,提供安全稳定的会议体验

在现代商业环境中&#xff0c;迅速而高效的沟通是企业成功的关键要素之一。而在传统的会议模式下&#xff0c;时间成本和地理限制往往给企业带来不小的困扰。针对这一问题&#xff0c;WorkPlus推出了一款创新的局域网会议软件——WorkPlus Meet&#xff0c;旨在为企业创造高效的…

掌握核心技巧就能创建完美的目录!如何在Word中自动创建目录

目录是Word布局的一个重要因素&#xff0c;尤其是在编写较长的文档时。那么&#xff0c;你如何在你的作品中添加目录呢&#xff1f;在这篇文章中&#xff0c;我将分享一些基于Word2016自动创建目录的经验。希望它能或多或少地帮到你。 自动创建目录 1、输入目录文本的名称&am…

前端页面布局之【Flex布局】详解

目录 &#x1f31f;前言&#x1f31f;浏览器支持&#x1f31f;Flex简介&#x1f31f;Flex基本概念&#x1f31f;容器属性&#x1f31f;项目排列方向&#x1f31f;项目包裹方式&#x1f31f;项目水平对齐方式&#x1f31f;项目的垂直对齐方式&#x1f31f;多行对齐方式 &#x1…

收藏!环境领域一区期刊最新汇总

环境1区期刊共有40本&#xff0c;影响因子在20分以上的仅有1本&#xff0c;为Nature Sustainability&#xff0c;10-20分的有16本&#xff0c;5-10分的有20本&#xff0c;5分以下的3本。 其中国产期刊有3本&#xff0c;分别是Biochar&#xff0c;Environmental Science and Ec…

Axure RP 9 for Mac(原型设计软件)中文正式版

Axure RP 9 是一款流行的原型设计和线框图软件&#xff0c;允许设计人员和开发人员为网站和移动应用程序创建交互式动态原型。它提供了一整套用于创建交互式设计的工具和功能&#xff0c;包括拖放小部件、条件逻辑、动态内容和动画。 软件下载&#xff1a;Axure RP 9 for Mac中…

自学黑客方法-----(网络安全)

如果你想自学网络安全&#xff0c;首先你必须了解什么是网络安全&#xff01;&#xff0c;什么是黑客&#xff01;&#xff01; 1.无论网络、Web、移动、桌面、云等哪个领域&#xff0c;都有攻与防两面性&#xff0c;例如 Web 安全技术&#xff0c;既有 Web 渗透2.也有 Web 防…

C语言:转义字符

目录 话不多说&#xff0c;先上表 \n \? \ \" \\ \t \a \ddd 附一张ASCII表 \xdd 练习 话不多说&#xff0c;先上表 一一举例解释下哈 \n 读取到结尾标识符\0 printf("demo\n\0Zh"); // demo \? 在书写连续多个问号时使用&#xff0c;防止…

拉绳位移传感器根据信号的不同接线定义也不一样

拉绳位移传感器根据信号的不同接线定义也不一样 拉绳位移传感器是如何来接线的&#xff0c;我们先要看选用的位移编码器是什么信号输出的&#xff0c;该产品的信号输出方式有很多种&#xff0c;我们来以增量型拉线编码器为例&#xff1b;它的信号输出有&#xff1a;正弦波信号、…

【重拾C语言】六、批量数据组织(三)数组初值;字符串、字符数组、字符串数组;类型定义 typedef

目录 前言 六、批量数据组织——数组 6.1~3 数组基础知识 6.4 线性表——分类与检索 6.5 带学号的成绩排序—数组初值 6.6 表示姓名—字符串 6.6.0 字符串、字符数组和字符串数组 6.6.1 字符串操作&#xff08;复制、连接、比较&#xff09; 6.6.2 回文字 6.6.3 成绩…

电机的基础知识

一、电机的定义&#xff1a; 电机&#xff08;Electric machinery&#xff09;&#xff0c;俗称“马达”&#xff0c;是指依据电磁感应定律实现电能转换或传递的一种电磁装置。分为电动机&#xff08;符号为M&#xff09;和发电机&#xff08;符号为G&#xff09;。 二、电机的…