Python 如何使用pyqt4查找可单击的小部件索引

Python 如何使用pyqt4查找可单击的小部件索引,python,python-2.7,pyqt,pyqt4,Python,Python 2.7,Pyqt,Pyqt4,在我的程序中,我需要创建多个小部件订单,因此我使用字典列表创建小部件列表。我使用鼠标释放事件创建可点击的小部件,但我没有得到小部件发送者单击的对象。任何人可以帮助我如何找到单击的小部件索引。 下面是我的代码: from datetime import datetime from PyQt4 import QtCore, QtGui from functools import partial class Orders(QtGui.QMainWindow): def __init__(sel

在我的程序中,我需要创建多个小部件订单,因此我使用字典列表创建小部件列表。我使用鼠标释放事件创建可点击的小部件,但我没有得到小部件发送者单击的对象。任何人可以帮助我如何找到单击的小部件索引。 下面是我的代码:

from datetime import datetime
from PyQt4 import QtCore, QtGui
from functools import partial
class Orders(QtGui.QMainWindow):
    def __init__(self, parent=None):
        super(Orders, self).__init__(parent)
        Online_order_dict = [{"Date":"jan-24-2019","Id":"#175","Amount":"191 rs", "Shopping":"Online","Order_City":"Hyderbad","Order_State":"TELANGANA"},{"Date":"jan-25-2019","Id":"#186","Amount": "200 Rs", "Shopping":"Online","Order_City":"Hyderbad","Order_State":"TELANGANA"},{"Date":"jan-29-2019","Id":"#188","Amount": "250 Rs", "Shopping":"Online","Order_City":"Hyderbad","Order_State":"TELANGANA"},{"Date":"jan-25-2019","Id":"#176","Amount": "200 Rs", "Shopping":"Online",
        "Order_City":"Hyderbad","Order_State":"TELANGANA"},{"Date":"jan-28-2019","Id":"#201","Amount": "250 Rs", "Shopping":"Online","Order_City":"Hyderbad","Order_State":"TELANGANA"}]

        self.qvw1 = QtGui.QWidget()
        self.scrollArea = QtGui.QScrollArea(widgetResizable=True)
        self.scrollArea.setWidget(self.qvw1)

        self.online_order_hbox = QtGui.QVBoxLayout(self.qvw1)
        self.online_label = QtGui.QPushButton("Online Order")
        self.online_label.setStyleSheet("QPushButton{ background-color: #FF8C00; color: white;outline : None;}")
        self.online_order_hbox.addWidget(self.online_label,QtCore.Qt.AlignTop)
        self.qvw1.setFixedWidth(round((550)))
        for i in Online_order_dict:
            self.w1 = QtGui.QWidget()
            # self.w1.mouseReleaseEvent=self.myfunction1
            self.w1_vbox=QtGui.QVBoxLayout(self.w1)
            self.hline1 = QtGui.QFrame();self.hline1.setFrameShape(QtGui.QFrame.HLine)
            self.date_label1 = QtGui.QLabel(i["Date"]  + "   " + i["Id"], alignment= QtCore.Qt.AlignCenter,objectName="small")
            self.amount = QtGui.QLabel("Amount:" + i["Amount"])
            self.shopping = QtGui.QLabel("Shopping :" + i["Shopping"])
            self.ordercity = QtGui.QLabel("Order City :" + i["Order_City"])
            self.orderstate = QtGui.QLabel("Order State :" +i["Order_State"])
            self.w1_vbox.addWidget(self.date_label1)
            self.w1_vbox.addWidget(self.amount)
            self.w1_vbox.addWidget(self.shopping)
            self.w1_vbox.addWidget(self.ordercity)
            self.w1_vbox.addWidget(self.orderstate)
            self.w1_vbox.addWidget(self.hline1)
            self.online_order_hbox.addWidget(self.w1)

        self.setCentralWidget(self.scrollArea)
if __name__ == '__main__':
    import sys


    app = QtGui.QApplication(sys.argv)

    settingobj= Orders()
    settingobj.show()
    settingobj.showFullScreen()
    sys.exit(app.exec_())

当应用程序的复杂性增加时,最好使用专门化策略,也就是说,创建一个只有责任的类,在这种情况下,创建一个当鼠标按下时发出信号的类,并且该类必须具有采样的信息才能轻松访问它

from PyQt4 import QtCore, QtGui

class InfoWidget(QtGui.QWidget):
    clicked = QtCore.pyqtSignal()

    def __init__(self, info, parent=None):
        super(InfoWidget, self).__init__(parent)
        self._info = info

        date_label = QtGui.QLabel("{}   {}".format(info["Date"], info["Id"]), alignment= QtCore.Qt.AlignCenter, objectName="small")
        amount_label = QtGui.QLabel("Amount:{}".format(info["Amount"]))
        shopping_label = QtGui.QLabel("Shopping :{}".format(info["Shopping"]))
        ordercity_label = QtGui.QLabel("Order City :{}".format(info["Order_City"]))
        orderstate_label = QtGui.QLabel("Order State :{}".format(info["Order_State"]))
        hline = QtGui.QFrame(frameShape=QtGui.QFrame.HLine)

        lay = QtGui.QVBoxLayout(self)
        lay.addWidget(date_label)
        lay.addWidget(amount_label)
        lay.addWidget(shopping_label)
        lay.addWidget(ordercity_label)
        lay.addWidget(orderstate_label)
        lay.addWidget(hline)

    @property
    def info(self):
        return self._info    

    def mousePressEvent(self, event):
        self.clicked.emit()
        super(InfoWidget, self).mousePressEvent(event)

class Orders(QtGui.QMainWindow):
    def __init__(self, parent=None):
        super(Orders, self).__init__(parent)
        Online_order_dict = [
            {"Date" : "jan-24-2019", "Id" : "#175", "Amount" : "191 rs", "Shopping" : "Online", "Order_City" : "Hyderbad", "Order_State" : "TELANGANA"},
            {"Date" : "jan-25-2019", "Id" : "#186", "Amount" : "200 Rs", "Shopping" : "Online", "Order_City" : "Hyderbad", "Order_State" : "TELANGANA"},
            {"Date" : "jan-29-2019", "Id" : "#188", "Amount" : "250 Rs", "Shopping" : "Online", "Order_City" : "Hyderbad", "Order_State" : "TELANGANA"},
            {"Date" : "jan-25-2019", "Id" : "#176", "Amount" : "200 Rs", "Shopping" : "Online", "Order_City" : "Hyderbad", "Order_State" : "TELANGANA"},
            {"Date" : "jan-28-2019", "Id" : "#201", "Amount" : "250 Rs", "Shopping" : "Online", "Order_City" : "Hyderbad", "Order_State" : "TELANGANA"}
        ]

        self.qvw1 = QtGui.QWidget()
        self.scrollArea = QtGui.QScrollArea(widgetResizable=True)
        self.scrollArea.setWidget(self.qvw1)

        online_order_hbox = QtGui.QVBoxLayout(self.qvw1)
        self.online_label = QtGui.QPushButton("Online Order")
        self.online_label.setStyleSheet("QPushButton{ background-color: #FF8C00; color: white;outline : None;}")
        online_order_hbox.addWidget(self.online_label,QtCore.Qt.AlignTop)
        self.qvw1.setFixedWidth(550)

        for i in Online_order_dict:
            w = InfoWidget(i)
            w.clicked.connect(self.on_info_clicked)
            online_order_hbox.addWidget(w)
        self.setCentralWidget(self.scrollArea)

    @QtCore.pyqtSlot()
    def on_info_clicked(self):
        w = self.sender()
        print(w.info)

if __name__ == '__main__':
    import sys
    app = QtGui.QApplication(sys.argv)
    settingobj= Orders()
    settingobj.showFullScreen()
    sys.exit(app.exec_())

当应用程序的复杂性增加时,最好使用专门化策略,也就是说,创建一个只有责任的类,在这种情况下,创建一个当鼠标按下时发出信号的类,并且该类必须具有采样的信息才能轻松访问它

from PyQt4 import QtCore, QtGui

class InfoWidget(QtGui.QWidget):
    clicked = QtCore.pyqtSignal()

    def __init__(self, info, parent=None):
        super(InfoWidget, self).__init__(parent)
        self._info = info

        date_label = QtGui.QLabel("{}   {}".format(info["Date"], info["Id"]), alignment= QtCore.Qt.AlignCenter, objectName="small")
        amount_label = QtGui.QLabel("Amount:{}".format(info["Amount"]))
        shopping_label = QtGui.QLabel("Shopping :{}".format(info["Shopping"]))
        ordercity_label = QtGui.QLabel("Order City :{}".format(info["Order_City"]))
        orderstate_label = QtGui.QLabel("Order State :{}".format(info["Order_State"]))
        hline = QtGui.QFrame(frameShape=QtGui.QFrame.HLine)

        lay = QtGui.QVBoxLayout(self)
        lay.addWidget(date_label)
        lay.addWidget(amount_label)
        lay.addWidget(shopping_label)
        lay.addWidget(ordercity_label)
        lay.addWidget(orderstate_label)
        lay.addWidget(hline)

    @property
    def info(self):
        return self._info    

    def mousePressEvent(self, event):
        self.clicked.emit()
        super(InfoWidget, self).mousePressEvent(event)

class Orders(QtGui.QMainWindow):
    def __init__(self, parent=None):
        super(Orders, self).__init__(parent)
        Online_order_dict = [
            {"Date" : "jan-24-2019", "Id" : "#175", "Amount" : "191 rs", "Shopping" : "Online", "Order_City" : "Hyderbad", "Order_State" : "TELANGANA"},
            {"Date" : "jan-25-2019", "Id" : "#186", "Amount" : "200 Rs", "Shopping" : "Online", "Order_City" : "Hyderbad", "Order_State" : "TELANGANA"},
            {"Date" : "jan-29-2019", "Id" : "#188", "Amount" : "250 Rs", "Shopping" : "Online", "Order_City" : "Hyderbad", "Order_State" : "TELANGANA"},
            {"Date" : "jan-25-2019", "Id" : "#176", "Amount" : "200 Rs", "Shopping" : "Online", "Order_City" : "Hyderbad", "Order_State" : "TELANGANA"},
            {"Date" : "jan-28-2019", "Id" : "#201", "Amount" : "250 Rs", "Shopping" : "Online", "Order_City" : "Hyderbad", "Order_State" : "TELANGANA"}
        ]

        self.qvw1 = QtGui.QWidget()
        self.scrollArea = QtGui.QScrollArea(widgetResizable=True)
        self.scrollArea.setWidget(self.qvw1)

        online_order_hbox = QtGui.QVBoxLayout(self.qvw1)
        self.online_label = QtGui.QPushButton("Online Order")
        self.online_label.setStyleSheet("QPushButton{ background-color: #FF8C00; color: white;outline : None;}")
        online_order_hbox.addWidget(self.online_label,QtCore.Qt.AlignTop)
        self.qvw1.setFixedWidth(550)

        for i in Online_order_dict:
            w = InfoWidget(i)
            w.clicked.connect(self.on_info_clicked)
            online_order_hbox.addWidget(w)
        self.setCentralWidget(self.scrollArea)

    @QtCore.pyqtSlot()
    def on_info_clicked(self):
        w = self.sender()
        print(w.info)

if __name__ == '__main__':
    import sys
    app = QtGui.QApplication(sys.argv)
    settingobj= Orders()
    settingobj.showFullScreen()
    sys.exit(app.exec_())