2016-05-30 818 views
0

我的代碼有問題:/ 我的程序需要點擊一個QFrame,QWidget或QGroupBox。 目前我使用mouseReleaseEvent,但它只適用於我的功能沒有設置值。Qt GUI可點擊Qframe或QWidget或Groupbox

def testc(self,e): 
print(e) 

#when I use this code: 
self.frame.mousePressEvent = self.testc; 
#it's okey 
#but when I'm using 
self.frame.mousePressEvent = self.testc("ssssss"); 
# after starting the function automatically performs a click not working 

enter image description here 我怎樣才能讓一個點擊小工具,框架或組盒?

我的Qt代碼

# -*- coding: utf-8 -*- 

# Form implementation generated from reading ui file 'ar.ui' 
# 
# Created by: PyQt4 UI code generator 4.11.4 
# 
# WARNING! All changes made in this file will be lost! 

from PyQt4 import QtCore, QtGui 

try: 
    _fromUtf8 = QtCore.QString.fromUtf8 
except AttributeError: 
    def _fromUtf8(s): 
     return s 

try: 
    _encoding = QtGui.QApplication.UnicodeUTF8 
    def _translate(context, text, disambig): 
     return QtGui.QApplication.translate(context, text, disambig, _encoding) 
except AttributeError: 
    def _translate(context, text, disambig): 
     return QtGui.QApplication.translate(context, text, disambig) 

class Ui_Form(object): 
    def setupUi(self, Form): 
     Form.setObjectName(_fromUtf8("Form")) 
     Form.resize(571, 149) 
     self.frame = QtGui.QFrame(Form) 
     self.frame.setGeometry(QtCore.QRect(30, 30, 120, 80)) 
     self.frame.setStyleSheet(_fromUtf8("background-color: rgb(88, 169, 255);")) 
     self.frame.setFrameShape(QtGui.QFrame.StyledPanel) 
     self.frame.setFrameShadow(QtGui.QFrame.Raised) 
     self.frame.setObjectName(_fromUtf8("frame")) 
     self.label = QtGui.QLabel(self.frame) 
     self.label.setGeometry(QtCore.QRect(17, 23, 91, 31)) 
     self.label.setObjectName(_fromUtf8("label")) 
     self.widget = QtGui.QWidget(Form) 
     self.widget.setGeometry(QtCore.QRect(210, 30, 120, 80)) 
     self.widget.setStyleSheet(_fromUtf8("background-color: rgb(255, 158, 160);")) 
     self.widget.setObjectName(_fromUtf8("widget")) 
     self.label_2 = QtGui.QLabel(self.widget) 
     self.label_2.setGeometry(QtCore.QRect(30, 40, 81, 31)) 
     self.label_2.setObjectName(_fromUtf8("label_2")) 
     self.groupBox = QtGui.QGroupBox(Form) 
     self.groupBox.setGeometry(QtCore.QRect(380, 30, 120, 80)) 
     self.groupBox.setStyleSheet(_fromUtf8("background-color: rgb(56, 30, 255);")) 
     self.groupBox.setObjectName(_fromUtf8("groupBox")) 
     self.label_3 = QtGui.QLabel(self.groupBox) 
     self.label_3.setGeometry(QtCore.QRect(7, 34, 101, 21)) 
     self.label_3.setObjectName(_fromUtf8("label_3")) 

     self.retranslateUi(Form) 
     QtCore.QMetaObject.connectSlotsByName(Form) 

    def retranslateUi(self, Form): 
     Form.setWindowTitle(_translate("Form", "Form", None)) 
     self.label.setText(_translate("Form", "clicable frame", None)) 
     self.label_2.setText(_translate("Form", "click widget", None)) 
     self.groupBox.setTitle(_translate("Form", "GroupBox", None)) 
     self.label_3.setText(_translate("Form", "click groupbox", None)) 

的一點是,我想要一組對象在我QFrame。點擊QFrame後,我希望我的程序在點擊後寫入。

回答

1

創建一個不帶參數

你必須分配功能mousePressEventself.testc("ssssss")也(可能)不會返回功能的功能。

你可以做的是創造另一個函數

def f(self): 
    return self.testc("ssssss") 

,並指定

self.frame.mousePressEvent = self.f 

對於這樣的俏皮話經常優選創建拉姆達

self.frame.mousePressEvent = lambda: self.tests("ssssss")