Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在PyQt4中显示自定义按钮类_Python_Qt_Pyqt_Qt4_Pyqt4 - Fatal编程技术网

Python 在PyQt4中显示自定义按钮类

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

我创建了一个自定义按钮类,希望将其添加到使用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.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_())