如何在程序种出发qbuttoon bn clickedd

I have dynamically created buttons(QtoolButton) in gridLayout in pyQT.
How can I get the name of the button clicked in the layout?
I can't know the name before hand.
Is there is any trigger to accomplish the task?
Thanks in advance.
解决方案 You can call self.sender() in a function connected to your button event to get the object that triggered the event. From there you can call the object's objectName() method to get the name.
Here's a quick example - the widget has 10 buttons and clicking on a button will update the label's text to show the button name.
import sys
from PyQt4.QtGui import QApplication, QWidget, QToolButton, QLabel, QVBoxLayout, QHBoxLayout
class Widget(QWidget):
def __init__(self, parent=None):
QWidget.__init__(self, parent)
self.button_layout = QHBoxLayout()
self.widget_layout = QVBoxLayout()
for button_number in xrange(1, 11):
button = QToolButton()
button.setText(str(button_number))
button.setObjectName('Button%d' % button_number)
button.released.connect(self.button_released)
self.button_layout.addWidget(button)
self.status_label = QLabel('No button clicked')
self.widget_layout.addItem(self.button_layout)
self.widget_layout.addWidget(self.status_label)
self.setLayout(self.widget_layout)
def button_released(self):
sending_button = self.sender()
self.status_label.setText('%s Clicked!' % str(sending_button.objectName()))
if __name__ == '__main__':
app = QApplication(sys.argv)
widget = Widget()
widget.show()
sys.exit(app.exec_())
本文地址: &
我已经动态创建按钮(QtoolButton)在网格布局在PyQt的。我怎样才能获得按钮的名称在布局点击?我不知道前手的名字。是否有任何触发器来完成任务?先谢谢了。解决方案 您可以致电 self.sender()在连接到您的按钮事件来获取对象的函数触发事件。从那里,你可以调用该对象的对象名()方法,以获取名称。下面是一个简单的例子 - 该部件有10个按钮,点击按钮将更新标签的文本显示按钮名称。 进口SYS从PyQt4.QtGui进口的QApplication,QWidget的,QToolButton,的QLabel,QVBoxLayout,QHBoxLayout,负责类小工具(QWidget中):
高清__init __(自我,父母=无):
QWidget的.__的init __(自我,父母)
self.button_layout = QHBoxLayout,负责()
self.widget_layout = QVBoxLayout()
在的xrange button_number时(1,11):
按钮= QToolButton()
button.setText(STR(button_number时))
button.setObjectName('按钮%D'%button_number时)
button.released.connect(self.button_released)
self.button_layout.addWidget(按钮)
self.status_label =的QLabel('否按钮点击“)
self.widget_layout.addItem(self.button_layout)
self.widget_layout.addWidget(self.status_label)
self.setLayout(self.widget_layout)
高清button_released(个体经营):
sending_button = self.sender()
self.status_label.setText('%s的点击过的!“%STR(sending_button.objectName()))如果__name__ =='__main__':
应用=的QApplication(sys.argv中)
小部件=小工具()
widget.show()
sys.exit(app.exec_())
本文地址: &
扫一扫关注官方微信QButtonGroup的简单应用 - CSDN博客
QButtonGroup的简单应用
所有代码都是在qt3.3.8+fedora8下运行的。
QButtonGroup用于统一管理一组QButton按钮。理论上所有继承自QButton的按钮类都可以使用。这里以QPushButton和QRadioButton为例演示。
按钮分组的作用主要用在项目选择上,可以单选,也可以多选,根据属性设置而定。
头文件: &qbuttongroup.h&
主要属性和函数:
按钮的标签,可以用这个标签来获得或操作组里的各个按钮。
bool exclusive:
This property holds whether the button group is exclusive.
If this property is TRUE, then the buttons in the group are toggled, and to untoggle a button you must click on another button in the group. The default value is FALSE.
Set this property's value with setExclusive() and get this property's value with isExclusive().
它标示了这个按钮组是否只能有一个按钮处于激活状态。
如果这个属性是TRUE,那么组里所有按钮都被toggled(不太会翻译这个词),要想取消一个按钮,必须点击另一个按钮。默认是FALSE。
设置该属性用setExclusive()函数;获得用isExclusive()。
insert(QButton *button, int id=-1)
向按钮组里添加一个按钮。
setButton(id)
使id所代表的按钮被选中
完整测试代码:
#ifndef GROUPBUTTONPAGE_H
#define GROUPBUTTONPAGE_H
#include &qpushbutton.h&
#include &qradiobutton.h&
#include &qlabel.h&
#include &qbuttongroup.h&
#include &qwidget.h&
#include &qlayout.h&
class GroupButtonPage : public QWidget
&&& Q_OBJECT
&&& GroupButtonPage(QWidget *parent=0, const char *name=0, WFlags f = 0) : QWidget(parent, name, f)
QVBoxLayout *vBox = new QVBoxLayout(this);
vBox-&setSpacing(10);
setRadioButtonGroup(vBox);
setPushButtonGroup(vBox);
private slots:
&&& void resetRadioButtonGroup(int id);
&&& void resetPushButtonGroup(int id);
&&& QButtonGroup *m_radioButtonG
&&& QButtonGroup *m_pushButtonG
&&& void setRadioButtonGroup(QLayout *l);
&&& void setPushButtonGroup(QLayout *l);
inline void GroupButtonPage::setRadioButtonGroup(QLayout *l){
&&& m_radioButtonGroup = new QButtonGroup(this);
&&& connect(m_radioButtonGroup, SIGNAL(clicked(int)), this, SLOT(resetRadioButtonGroup(int)));
&&& //m_radioButtonGroup-&setExclusive(true);//按钮间互斥选中,也就是说同时只能有一个被选中状态
&&& m_radioButtonGroup-&hide();//将buttonGroup隐藏起来(只显示按钮就行了)
&&& //QButtonGroup是没有布局管理的,需要借助layout类实现
&&& QHBoxLayout *hBox = new QHBoxLayout(l);
&&& hBox-&setSpacing(5);
&&& hBox-&addWidget(new QLabel(&radiobutton按钮组:&, this));
&&& hBox-&addWidget(m_radioButtonGroup);
&&& //向buttonGroup里放三个radioButton
&&& QRadioButton *btn1 = new QRadioButton(&按钮一&, this, &radiobutton1&);
&&& hBox-&addWidget(btn1);
&&& m_radioButtonGroup-&insert(btn1);
&&& QRadioButton *btn2 = new QRadioButton(&按钮二&, this, &radiobutton2&);
&&& hBox-&addWidget(btn2);
&&& m_radioButtonGroup-&insert(btn2);
&&& QRadioButton *btn3 = new QRadioButton(&按钮三&, this, &radiobutton3&);
&&& //btn3-&setToggleButton(true);//QRadioButton::setToggleButton()是受保护的,因为默认就是true的。
&&& hBox-&addWidget(btn3);
&&& m_radioButtonGroup-&insert(btn3);
&&& //设置第一个按钮被选中
&&& m_radioButtonGroup-&setButton(0);
inline void GroupButtonPage::setPushButtonGroup(QLayout *l){
&&& m_pushButtonGroup = new QButtonGroup(this);
&&& connect(m_pushButtonGroup, SIGNAL(clicked(int)), this, SLOT(resetPushButtonGroup(int)));
&&& m_pushButtonGroup-&setExclusive(true);//按钮间互斥选中,也就是说同时只能有一个被选中状态
&&& m_pushButtonGroup-&hide();//将buttonGroup隐藏起来(只显示按钮就行了)
&&& //QButtonGroup是没有布局管理的,需要借助layout类实现
&&& QHBoxLayout *hBox = new QHBoxLayout(l);
&&& hBox-&setSpacing(5);
&&& hBox-&addWidget(new QLabel(&pushbutton按钮组:&, this));
&&& hBox-&addWidget(m_pushButtonGroup);
&&& //向buttonGroup里放三个pushButton
&&& QPushButton *btn1 = new QPushButton(&按钮一&, this, &pushbutton1&);
&&& btn1-&setToggleButton(true);
&&& hBox-&addWidget(btn1);
&&& m_pushButtonGroup-&insert(btn1);
&&& QPushButton *btn2 = new QPushButton(&按钮二&, this, &pushbutton2&);
&&& btn2-&setToggleButton(true);
&&& hBox-&addWidget(btn2);
&&& m_pushButtonGroup-&insert(btn2);
&&& QPushButton *btn3 = new QPushButton(&按钮三&, this, &pushbutton3&);
&&& btn3-&setToggleButton(true);
&&& hBox-&addWidget(btn3);
&&& m_pushButtonGroup-&insert(btn3);
&&& //设置第一个按钮被选中
&&& m_pushButtonGroup-&setButton(0);
inline void GroupButtonPage::resetRadioButtonGroup(int id){
&&& m_radioButtonGroup-&setButton(id);
&&& qDebug(&GroupButtonPage::resetRadioButtonGroup: id=%d&, id);
&&& qDebug(&GroupButtonPage::resetRadioButtonGroup: name=%s&, m_radioButtonGroup-&selected()-&name());
inline void GroupButtonPage::resetPushButtonGroup(int id){
&&& m_pushButtonGroup-&setButton(id);
&&& qDebug(&GroupButtonPage::resetPushButtonGroup: id=%d&, id);
&&& qDebug(&GroupButtonPage::resetPushButtonGroup: name=%s&, m_pushButtonGroup-&selected()-&name());
#endif //GROUPBUTTONPAGE_H
显示效果如下:
本文已收录于以下专栏:
相关文章推荐
简述QSlider部件提供了一个垂直或水平滑动条。滑块是一个用于控制有界值的典型部件。它允许用户沿水平或垂直方向移动滑块,并将滑块所在的位置转换成一个合法范围内的值。简述
基本使用...
简述QCheckBox继承自QAbstractButton,它提供了一个带文本标签的复选框。QCheckBox(复选框)和QRadioButton(单选框)都是选项按钮。这是因为它们都可以在开(选中)...
(DEMO代码)项目名称:myCamera
myCamera.pro
QT += multimedia
QT += multimediawidgets
mycamerad...
QButtonGroup结合QSS实现互斥按钮颜色变化
昨天我和他吵架了,还没等战争完全结束,他就甩门而出,一阵冷风吹来,让我抖擞不已,一股寒意让我感觉好冷好,一直冷到心底,窗外绵绵的细雨还在飘洒不停。  婚后,你越来越不肯哄我了,也越来越懒得哄我了,那是...
发福利了、发福利了、发福利了,重要的事情说三遍。。。
为了方便更多Qter了解、学习Qt,现将相关资源进行整理,主要内容包括:Qt官网、编码风格、GitHub & Third-Party、社区论坛、...
他的最新文章
讲师:王禹华
讲师:宋宝华
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)13:40 提问
qt里如何返回按钮组(是QPushButton的按钮组而不是QRadioButton)
添加了四个按钮到一个按钮组
connect(按钮组,SIGNAL(buttoncClicked(int),this,SLOT(槽函数))
现在要点击以后选中按钮,再次点击其他位置实现移动按钮的功能,但是选中按钮时怎么才能得到处于选中状态的按钮的id或者是直接可以把选中按钮的用另一个按钮的指针去指向它。
按赞数排序
点击了后,按钮组的buttonClicked信号的参数不就是当前被点击按钮的id吗,这个可以传到槽函数里
槽函数里面
QPushButton button = qobject_cast&QPushButton& (sender());
把发送者QObject类型强转成QPushButton类型就可以了。至于你要判断是第几个按钮,你可以建按钮的时候加动态属性property
其他相关推荐Qt之QCheckBox - CSDN博客
Qt之QCheckBox
QCheckBox继承自QAbstractButton,它提供了一个带文本标签的复选框。
QCheckBox(复选框)和QRadioButton(单选框)都是选项按钮。这是因为它们都可以在开(选中)或者关(未选中)之间切换。区别是对用户选择的限制:单选框定义了“多选一”的选择,而复选框提供的是“多选多”的选择。
尽管在技术上可以通过复选框来实现单选框的行为,反之亦然,但还是强烈建议使用众所周知的约定。
QButtonGroup可以用来在视觉上把许多复选框组织在一起。
只要复选框被选中或者清除,都会发射一个stateChanged()信号。如果想在复选框状态改变的时候触发一个行为,请连接这个信号,可以使用 isChecked()来查询复选框是否被选中。
除了常用的选中和未选中两个状态,QCheckBox还可选地提供了第三种状态(半选)来表明“没有变化”。当需要给用户一个选中或者未选中复选框的选择时,这是很有用的。如果需要第三种状态,可以通过setTristate()来使它生效,并使用checkState()来查询当前的切换状态。
和QPushButton一样,复选框可以显示文本或者图标。文本可以通过构造函数或者setText()来设置,图标可以通过setIcon()来设置。
QCheckBox *checkbox = new QCheckBox("C&ase sensitive", this);
这个例子中,快捷键为Alt+a,详情请参阅QShortcut文档。要显示一个实际的符号,使用“&&”。
重要的继承函数:text()、setText()、pixmap()、setPixmap()、accel()、setAccel()、isToggleButton()、setDown()、isDown()、isOn()、checkState()、 autoRepeat()、isExclusiveToggle()、group()、setAutoRepeat()、toggle()、pressed()、released()、clicked()、toggled()、checkState()、stateChanged()。
Qt::CheckState checkState() const
返回复选框的选中状态。如果不需要三态的支持,可以使用QAbstractButton::isChecked(),它返回一个布尔值。
bool isTristate() const
复选框是否为一个三态复选框。
默认的是false,也就是说复选框只有两个状态。
void setCheckState(Qt::CheckState state)
设置复选框的选中状态。如果不需要三态的支持,可以使用QAbstractButton:setChecked(),它接受一个布尔值。
void setTristate(bool y = true)
设置复选框为一个三态复选框。
void stateChanged(int state)
当复选框状态发生改变,这个信号就会被发射。即:用户选中或者取消选中。
三态复选框
下面,我们实现一个三态复选框,并监听状态变化。
构造一个复选框QCheckBox,然后使用setTristate()开启三态模式。
QCheckBox *pCheckBox = new QCheckBox(this);
m_pLabel = new QLabel(this);
m_pLabel-&setText("Click CheckBox...");
pCheckBox-&setText(QString::fromLocal8Bit("三态复选框"));
pCheckBox-&setTristate();
connect(pCheckBox, SIGNAL(stateChanged(int)), this, SLOT(onStateChanged(int)));
槽函数,判断当前复选框状态,其中包括:选中(Qt::Checked)、半选(Qt::PartiallyChecked)、未选中(Qt::Unchecked)。
void MainWindow(int state)
if (state == Qt)
m_pLabel-&setText("Checked");
else if(state == Qt)
m_pLabel-&setText("PartiallyChecked");
m_pLabel-&setText("Unchecked");
复选框样式。
spacing: 5px;
color: white;
::indicator {
width: 17px;
height: 17px;
::indicator:enabled:unchecked {
image: url(:/Images/checkBox);
::indicator:enabled:unchecked:hover {
image: url(:/Images/checkBoxHover);
::indicator:enabled:unchecked:pressed {
image: url(:/Images/checkBoxPressed);
::indicator:enabled:checked {
image: url(:/Images/checkBoxChecked);
::indicator:enabled:checked:hover {
image: url(:/Images/checkBoxCheckedHover);
::indicator:enabled:checked:pressed {
image: url(:/Images/checkBoxCheckedPressed);
::indicator:enabled:indeterminate {
image: url(:/Images/checkBoxIndeterminate);
::indicator:enabled:indeterminate:hover {
image: url(:/Images/checkBoxIndeterminateHover);
::indicator:enabled:indeterminate:pressed {
image: url(:/Images/checkBoxIndeterminatePressed);
连接stateChanged()信号和槽函数,当用户点击复选框时,状态发生改变就会调用槽函数。
那么,如果我们不是手动在界面上点击,如何执行槽函数呢?
这时,有些人就会说这很简单啊,看connect就清楚了,直接发射stateChanged()信号或直接调用槽函数:
emit pCheckBox-&stateChanged(Qt);
onStateChanged(Qt);
这当然可以。这里我想说的是除了这种方式外,还有木有其它方式呢?我们追朔到QCheckBox的基类QAbstractButton,它里面有一系列的信号和函数,我们可以尝试一下。
经过试验,我们归结了两类,分别是可触发和不可触发槽函数的:
不可触发槽函数:
emit pCheckBox-&clicked(true);
emit pCheckBox-&toggled(true);
emit pCheckBox-&pressed();
emit pCheckBox-&released();
可触发槽函数:
pCheckBox-&animateClick();
pCheckBox-&click();
pCheckBox-&toggle();
pCheckBox-&setChecked(true);
pCheckBox-&setCheckState(Qt);
也就是说,通过调用这些信号或函数,我们可以很容易判定其是否可以触发stateChanged()信号,从而调用槽函数onStateChanged()。
我们来实现一个iphone中常见的开关效果 - 多选。
构建复选框QCheckBox,然后将它们添加至按钮组QButtonGroup中。
QHBoxLayout *pLayout = new QHBoxLayout();
m_pButtonGroup = new QButtonGroup(this);
m_pButtonGroup-&setExclusive(false);
for (int i = 0; i & 3; ++i)
QCheckBox *pCheckBox = new QCheckBox(this);
pCheckBox-&setText(QString("切换%1").arg(i + 1));
pLayout-&addWidget(pCheckBox);
m_pButtonGroup-&addButton(pCheckBox);
pLayout-&setSpacing(10);
pLayout-&setContentsMargins(10, 10, 10, 10);
setLayout(pLayout);
connect(m_pButtonGroup, SIGNAL(buttonClicked(QAbstractButton*)), this, SLOT(onButtonClicked(QAbstractButton*)));
槽函数,用来判断当前点击的按钮,以及获取按钮组各个按钮的选中状态。
void MainWindow(QAbstractButton *button)
qDebug() && QString("Clicked Button : %1").arg(button-&text());
QList&QAbstractButton*& list = m_pButtonGroup-&buttons();
foreach (QAbstractButton *pCheckBox, list)
QString strStatus = pCheckBox-&isChecked() ? "Checked" : "Unchecked";
qDebug() && QString("Button : %1 is %2").arg(pCheckBox-&text()).arg(strStatus);
复选框样式
spacing: 2px;
color: white;
::indicator {
width: 45px;
height: 30px;
::indicator:unchecked {
image: url(:/Images/switchOff);
::indicator:unchecked:hover {
image: url(:/Images/switchOffHover);
::indicator:unchecked:pressed {
image: url(:/Images/switchOffPressed);
::indicator:checked {
image: url(:/Images/switchOn);
::indicator:checked:hover {
image: url(:/Images/switchOnHover);
::indicator:checked:pressed {
image: url(:/Images/switchOnPressed);
上面,我们通过调用QButtonGroup的setExclusive(false)来设置按钮组中的复选框不互斥(可以多选)。
如上,我们使用了QButtonGroup,仅仅为了演示复选框实现单选功能(只需设置setExclusive(true)打开互斥即可)。即使这样,如之前所言 - 强烈建议使用众所周知的约定。所以,如果要实现单选功能,建议选择QRadioButton。
本文已收录于以下专栏:
相关文章推荐
简述QToolButton类提供了用于命令或选项可以快速访问的按钮,通常可以用在QToolBar里面。工具按钮和普通的命令按钮不同,通常不显示文本,而显示图标。简述
更多参考详细描...
简述接触过IOS系统的童鞋们应该对开关按钮很熟悉了,它的切换以及滑动比较帅气。通常说的开关按钮,有两个状态:on、off。下面,我们利用自定义控件来实现一个开关按钮。简述
简述前面章节我们分享过Qt之QAbstractButton,讲解了QAbstractButton的基本用法,本节着重讲解QPushButton。简述
更多参考关于QPus...
简述QRadioButton部件提供了一个带有文本标签的单选框(单选按钮)。QRadioButton是一个可以切换选中(checked)或未选中(unchecked)的选项按钮,。单选框通常呈现给用户...
简述QAbstractButton类是按钮窗口部件的抽象基类,提供了按钮所共有的功能。QAbstractButton类实现了一个抽象按钮,并且让它的子类来指定如何处理用户的动作,并指定如何绘制按钮。Q...
实现环境:Qt Creator 3.2.1 Based on Qt5.3.2 (GCC 4.9.2, 32bit)
项目类型:Qt Widgets Application
1.首先在项目中添加Qt...
QT之CheckBox单项选择与多项选择QT之CheckBox单项选择与多项选择
结尾开篇之叙
今天简单的给大家介绍下CheckBox的单项选择与多项选择。我们在使用Ch...
在初始化函数中,添加如下代码:
0;iui-&setting_tableWidget-&rowCount
在QTableWidget中会经常用的checkBox,但是如何判断复选框是否被选中呢,方法是利用QTableWidget::cellChanged()函数,检查单元格内容的变化,然后连接此信号,在槽...
他的最新文章
讲师:王禹华
讲师:宋宝华
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)

我要回帖

更多关于 行政出发的一般程序 的文章

 

随机推荐