我創建了一個自定義按鈕類,我希望將其添加到使用QT Designer創建的佈局中。在PyQt4中顯示自定義按鈕類
這裏是一流的初始化功能:
class Ui_Form(QtGui.QWidget):
def __init__(self):
QtGui.QWidget.__init__(self)
self.setupUi(self)
self.button1 = Button()
self.button1.clicked.connect(self.button1.playSample)
這裏是按鈕類是呼籲:
class Button(QtGui.QPushButton):
def __init__(self):
super(Button, self).__init__()
self.setAcceptDrops(True)
self.setGeometry(QtCore.QRect(90, 90, 61, 51))
self.setText("Drag onto Me")
的問題是,我不知道如何顯示這個按鈕類以我顯示由QT Designer創建的按鈕的方式顯示。
按鈕目前被添加到Ui_Form類的setupUi函數中,它們以下面的方式添加到佈局管理器中,所以我假設'form'與它有關,但我不知道是什麼這樣做)!
self.btn_b8 = QtGui.QPushButton(Form)
self.btn_b8.setGeometry(QtCore.QRect(440, 90, 61, 51))
self.btn_b8.setText("")
icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap("Python/LP_Proj/LP_Square_Off.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.btn_b8.setIcon(icon)
self.btn_b8.setIconSize(QtCore.QSize(55, 55))
self.btn_b8.setObjectName("btn_b8")
這裏是一個代碼簡約的例子(如描繪一個按鈕的工作,我想創建不是按鈕,小我可以使它)正在顯示..我之所以不知道如何使用佈局管理器來實現的是,我有一個需要使用的背景圖像,並且使用佈局管理器,圖像只是放入其中一個插槽,而不是將所有內容放在它上面。但是這很可能是由於我對PyQt的知識有限!
import sys
from PyQt4 import QtCore, QtGui
class Ui_Form(QtGui.QWidget):
def __init__(self):
QtGui.QWidget.__init__(self)
self.setupUi(self)
def setupUi(self, Form):
Form.setObjectName("Form")
Form.resize(591, 591)
self.Background = QtGui.QLabel(Form)
self.Background.setGeometry(QtCore.QRect(0, 0, 631, 591))
self.Background.setText("")
self.Background.setPixmap(QtGui.QPixmap("Python/LP_Proj/LP_Background.png"))
self.Background.setObjectName("Background")
self.btn_a1 = Button(Form)
self.btn_a2 = QtGui.QPushButton(Form)
self.btn_a2.setGeometry(QtCore.QRect(90, 40, 41, 41))
self.btn_a2.setText("")
self.btn_a2.setObjectName("btn_a2")
self.lab_a1 = QtGui.QLabel(Form)
self.lab_a1.setGeometry(QtCore.QRect(20, 76, 61, 16))
font = QtGui.QFont()
font.setPointSize(10)
self.lab_a1.setFont(font)
self.lab_a1.setObjectName("lab_a1")
self.lab_a2 = QtGui.QLabel(Form)
self.lab_a2.setGeometry(QtCore.QRect(80, 76, 61, 16))
font = QtGui.QFont()
font.setPointSize(10)
self.lab_a2.setFont(font)
self.lab_a2.setObjectName("lab_a2")
self.retranslateUi(Form)
QtCore.QMetaObject.connectSlotsByName(Form)
def retranslateUi(self, Form):
Form.setWindowTitle(QtGui.QApplication.translate("Form", "Launchpad Control", None, QtGui.QApplication.UnicodeUTF8))
self.btn_a1.clicked.connect(self.btn_a1.playSample)
self.lab_a1.setText(QtGui.QApplication.translate("Form", "<html><head/><body><p align=\"center\"><span style=\" color:#ffffff;\">Unassigned</span></p></body></html>", None, QtGui.QApplication.UnicodeUTF8))
self.lab_a2.setText(QtGui.QApplication.translate("Form", "<html><head/><body><p align=\"center\"><span style=\" color:#ffffff;\">Unassigned</span></p></body></html>", None, QtGui.QApplication.UnicodeUTF8))
class Button(QtGui.QPushButton):
def __init__(self, Form):
super(Button, self).__init__()
self.setAcceptDrops(True)
self.setGeometry(QtCore.QRect(30, 40, 41, 41))
self.setText("")
self.setObjectName("btn_a1")
def dragEnterEvent(self, event):
if event.mimeData().hasUrls():
event.acceptProposedAction()
else:
super(Button, self).dragEnterEvent(event)
def dragMoveEvent(self, event):
super(Button, self).dragMoveEvent(event)
def dropEvent(self, event):
if event.mimeData().hasUrls():
for url in event.mimeData().urls():
self.samplepath = str(url.toLocalFile())
print self.samplepath
event.acceptProposedAction()
else:
super(Button,self).dropEvent(event)
def playSample(self):
sample = self.samplepath
print sample
if __name__=='__main__':
app = QtGui.QApplication(sys.argv)
ex = Ui_Form()
ex.show()
sys.exit(app.exec_())
按鈕'a1'應該創建在'a2'的左邊和標籤'a1'的上面。下面是運行程序的小截圖以及按鈕的位置。總共有80個按鈕+標籤,都具有這種拖放功能,因此我更喜歡/需要使用一個類。該課程最終將確定該按鈕的位置和圖像,但現在我只是試圖讓它工作!
您可以在上面的行中定義'self.button1';你不要在任何地方定義'button1'。它們不是一回事 - 一個是存在的實例屬性,另一個是全局變量。 – abarnert
圖騰剛剛指出:這是一個錯誤,而我正在試圖解決問題。如果我有.connect(self.button1.playSample)程序運行,但似乎完全忽略了類的實例化? –
該類正在實例化;它怎麼能*不是*你期望發生的事情不是什麼? – kindall