예제 #1
0
class FindHandleDialog(QDialog):
    def __init__(self, model, parent):
        super().__init__(parent)
        self.model = model
        self.setModal(False)
        self.setAttribute(Qt.WA_DeleteOnClose)
        # QDialogs at least in GNOME do not have a close button by default
        self.setWindowFlags(Qt.Window | Qt.WindowSystemMenuHint | Qt.WindowCloseButtonHint)
        self.setWindowTitle('Linux Process Explorer Search')
        self.setGeometry(0, 0, 900, 500)
        self.move((parent.width() - self.width()) / 2 + parent.x(),
                  (parent.height() - self.height()) / 2 + parent.y())

        lblSearch = QLabel('Descriptor or Lib substring:')
        self.txtSearch = QLineEdit()
        btnSearch = QPushButton('&Search')
        btnSearch.clicked.connect(self.onBtnSearchClicked)
        btnCancel = QPushButton('&Cancel')
        searchLayout = QHBoxLayout()
        searchLayout.addWidget(lblSearch)
        searchLayout.addWidget(self.txtSearch)
        searchLayout.addWidget(btnSearch)
        searchLayout.addWidget(btnCancel)
        self.tblResults = QTableWidget(0, 4)
        self.tblResults.setHorizontalHeaderLabels(('Process', 'PID', 'Type', 'Name'))
        self.tblResults.horizontalHeader().setStretchLastSection(True)
        self.tblResults.verticalHeader().setVisible(False)
        self.tblResults.setShowGrid(False)
        self.tblResults.setSelectionBehavior(QTableWidget.SelectRows)
        self.tblResults.verticalHeader().setDefaultSectionSize(24)
        mainLayout = QVBoxLayout()
        mainLayout.addLayout(searchLayout)
        mainLayout.addWidget(self.tblResults)
        self.setLayout(mainLayout)

    @pyqtSlot(bool)
    def onBtnSearchClicked(self, checked=False):
        handleSubstr = self.txtSearch.text()
        if handleSubstr:
            results = self.model.findHandlesBySubstr(handleSubstr)
            self.tblResults.setRowCount(len(results))
            for row, res in enumerate(results):
                for col, prop in enumerate(res):
                    item = QTableWidgetItem(str(prop))
                    item.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled)
                    self.tblResults.setItem(row, col, item)

    def keyPressEvent(self, event):
        if event.key() == Qt.Key_Enter and self.txtSearch.hasFocus():
            self.onBtnSearchClicked()
            return
        super().keyPressEvent(event)