Python 在PyQt4中显示自定义按钮类
我创建了一个自定义按钮类,希望将其添加到使用QT Designer创建的布局中 下面是第一个类'init函数:Python 在PyQt4中显示自定义按钮类,python,qt,pyqt,qt4,pyqt4,Python,Qt,Pyqt,Qt4,Pyqt4,我创建了一个自定义按钮类,希望将其添加到使用QT Designer创建的布局中 下面是第一个类'init函数: class Ui_Form(QtGui.QWidget): def __init__(self): QtGui.QWidget.__init__(self) self.setupUi(self) self.button1 = Button() self.button1.clicked.connect(self.bu
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)
下面是它调用的button类:
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设计器创建的按钮的方式显示这个按钮类
按钮当前以以下方式添加到Ui_Form类的setupUi函数中(它们没有添加到布局管理器中,因此我假设“Form”与此有关,但我不知道该怎么做!):
下面是一个简单的代码示例(尽可能小),它描述了一个按钮正在工作,而我试图创建的按钮没有显示出来。。我不知道如何使用布局管理器实现的原因是,我有一个需要使用的背景图像,而使用布局管理器时,图像只是放在一个插槽中,而不是将所有内容都放在其中。但这很可能是因为我对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_())
导入系统
从PyQt4导入QtCore、QtGui
类Ui_表单(QtGui.QWidget):
定义初始化(自):
QtGui.QWidget.\uuuuu init\uuuuuuu(self)
self.setupUi(self)
def setupUi(自我,表格):
Form.setObjectName(“表单”)
表单。调整大小(591591)
self.Background=QtGui.QLabel(表单)
self.Background.setGeometry(QtCore.QRect(0,0631591))
self.Background.setText(“”)
setPixmap(QtGui.QPixmap(“Python/LP_Proj/LP_Background.png”))
self.Background.setObjectName(“背景”)
self.btn_a1=按钮(表格)
self.btn_a2=QtGui.QPushButton(表单)
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(表单)
self.lab_a1.setGeometry(QtCore.QRect(20,76,61,16))
font=QtGui.QFont()
字体设置点大小(10)
self.lab_a1.setFont(字体)
self.lab_a1.setObjectName(“lab_a1”)
self.lab_a2=QtGui.QLabel(表单)
self.lab_a2.setGeometry(QtCore.QRect(80,76,61,16))
font=QtGui.QFont()
字体设置点大小(10)
self.lab_a2.setFont(字体)
self.lab_a2.setObjectName(“lab_a2”)
自重传(表格)
QtCore.QMetaObject.connectSlotsByName(表单)
def重新传输(自身,表格):
setWindowTitle(QtGui.QApplication.translate(“表单”,“启动板控件”,无,QtGui.QApplication.UnicodeUTF8))
self.btn_a1.单击.connect(self.btn_a1.播放示例)
self.lab_a1.setText(QtGui.QApplication.translate(“Form”,“”,无,QtGui.QApplication.UnicodeUTF8)) self.lab_a2.setText(QtGui.QApplication.translate(“Form”,“
”,无,QtGui.QApplication.UnicodeUTF8)) 类按钮(QtGui.QPushButton): 定义初始(自我,形式): 超级(按钮,自我)。\uuuu初始化 self.setAcceptDrops(真) self.setGeometry(QtCore.QRect(30,40,41,41)) self.setText(“”) self.setObjectName(“btn_a1”) def dragEnterEvent(自身、事件): 如果event.mimeData().hasURL(): event.acceptProposeAction() 其他: 超级(按钮,自我)。dragEnterEvent(事件) def dragMoveEvent(自身,事件): 超级(按钮,自我)。dragMoveEvent(事件) def dropEvent(自身,事件): 如果event.mimeData().hasURL(): 对于event.mimeData().url()中的url: self.samplepath=str(url.toLocalFile()) 打印self.samplepath event.acceptProposeAction() 其他: 超级(按钮,自我)。dropEvent(事件) def播放示例(自身): sample=self.samplepath 打印样本 如果“名称”=“\uuuuuuuu主要”: app=QtGui.QApplication(sys.argv) ex=Ui_Form() 例如:show() sys.exit(app.exec_()) 按钮“a1”应创建在“a2”左侧和标签“a1”上方。下面是程序运行的小屏幕截图以及按钮的位置。总共有80个按钮+标签,都具有拖放功能,因此我更喜欢/需要使用类。这个类最终将确定按钮的位置和图像,但现在我只是想让它工作
Python没有忽略
按钮的实例化。PyQt也不是。按钮肯定正在创建中
关键是在创建时,您无法看到它。这是因为您必须将其添加到属于Ui\u表单的子布局中,或者明确指定按钮的父窗口小部件(前者实际上在内部执行后者)
我建议将其添加到Ui\u表单中的布局中,以便它在调整窗口大小时表现良好,等等。请查看setupUi()
方法,查看那里的按钮是如何添加到布局中的。然后将其复制到自定义按钮中。您可以在上面的行中定义self.button1
;您没有在任何地方定义按钮1
。它们不是一回事,一个是存在的实例属性,另一个是不存在的全局变量。如果我有.connect(self.button1.playSample),程序运行时似乎完全忽略了类的实例化?类正在实例化;怎么可能不呢?您预计会发生哪些不可能发生的事情?您将按钮添加到布局的代码在哪里?您能否提供一个简单的示例(我们可以运行),其中有两个按钮可以工作(由setupUi
)和一个不工作。很难理解您当前正在做什么。我将在中添加当前在setupUi函数中添加按钮的方式
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_())