是否可以将图像放入GUI应用程序并使其可单击?
我曾经做过这样的按钮:
img = QPixmap(15, 15)
img.fill(Qt.grey)
button = QPushButton(QIcon(img))
button.clicked.connect(self.button_click)
Link http://imagizer.imageshack.us/v2/800x600q90/834/kaqc.png
但我更喜欢使用图片,而不是带图标的按钮..
答案 0 :(得分:4)
我有同样的要求,并通过继承QLabel来解决它,正如yshurik建议的那样。额外代码的数量非常有限。这是一个有效的实施方案:
class CClickableLabel : public QLabel
{
Q_OBJECT
public:
CClickableLabel(QString text, QWidget *parent = 0) : QLabel(text, parent) {}
~CClickableLabel() {}
signals:
void clicked();
protected:
void mousePressEvent(QMouseEvent *event) { emit clicked(); }
};
创建实例CClickableLabel,使用setPixmap()设置图像并侦听clicked()信号。这应该可以解决问题。
答案 1 :(得分:1)
这是一个简单的演示脚本,演示如何制作可点击标签的网格:
from random import shuffle
from PySide import QtCore, QtGui
class ClickableLabel(QtGui.QLabel):
clicked = QtCore.Signal(str)
def __init__(self, width, height, color):
super(ClickableLabel, self).__init__()
pixmap = QtGui.QPixmap(width, height)
pixmap.fill(QtGui.QColor(color))
self.setPixmap(pixmap)
self.setObjectName(color)
def mousePressEvent(self, event):
self.clicked.emit(self.objectName())
class Window(QtGui.QWidget):
def __init__(self):
QtGui.QWidget.__init__(self)
layout = QtGui.QGridLayout(self)
colors = 'red green blue orange purple yellow'.split()
for row in range(len(colors)):
shuffle(colors)
for column, color in enumerate(colors):
label = ClickableLabel(25, 25, color)
label.clicked.connect(self.handleLabelClicked)
layout.addWidget(label, row, column)
def handleLabelClicked(self, name):
print('"%s" clicked' % name)
if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
window = Window()
window.setGeometry(500, 300, 200, 200)
window.show()
sys.exit(app.exec_())
答案 2 :(得分:0)
我猜快速解决方案是子类QLabel,使用setPixmap()将图像置于其上并重新实现mouseEvent()以在按下/释放事件上提交clicked()信号。因为它是python(PyQt / PySide),所以它应该只有几行。通常我需要一些可点击的图形时使用这种方法。
答案 3 :(得分:0)
按钮具有风格,你可以将图像放在它们上面。