6

我想在 QLineEdit 出现后立即将其提供给焦点......在其他情况下(同一类中的所有小部件),它是可能的.setFocus()- 但在这里这不起作用。我的候选人是.activateWindow()and .raise_(),但我不知道如何使用它们。

编辑:我的目标是能够直接从键盘输入 QLineEdit,而无需提前敲击tab键或用鼠标单击。

以下是相关部分的示例(功能):

import sys
from PyQt4.QtGui import *
from PyQt4.QtCore import *

class Quiz(QWidget):
    def __init__(self):
        QWidget.__init__(self)

        edit = QLineEdit("Select & Focus")
        edit.selectAll()
        edit.setFocus()             # doesn't work - no effect at all

        vbox = QVBoxLayout()
        vbox.addWidget(edit)
        self.setLayout(vbox)


class MainWindow(QMainWindow):
    def __init__(self):
        QMainWindow.__init__(self)

        startQuiz = QAction("Start Quiz", self)
        startQuiz.triggered.connect(self.startQuizQuestions)

        menubar = self.menuBar()
        quizMenu = menubar.addMenu("&Quiz")
        quizMenu.addAction(startQuiz)

        self.setGeometry(300, 300, 500, 400)
        self.setWindowTitle("xyz")
        self.show()

    def startQuizQuestions(self):
        newQuiz = Quiz()
        self.setCentralWidget(newQuiz)


def main():
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()

如果您看到我严重滥用 Python 或 PyQt4 ......请随意批评,我想学习。

编辑:我在PySide Docs中找到了.activateWindow这个令人沮丧的“评论”:“在 Windows 上,如果您在应用程序当前不是活动的应用程序时调用它,那么它不会使其成为活动窗口。” - 但我的意思是它是活动窗口(= MainWindow),它只是活动窗口的 CentralWidget 中的另一个小部件。(?)

4

1 回答 1

12

如果你给小部件一个父级,它就可以工作。

这是带有新父参数的小部件的初始化函数,用于 QWidget。然后 QWidget 用作标签的父级。

def __init__(self, parent=None):
    QWidget.__init__(self, parent)

    edit = QLineEdit("Select & Focus", self)
    edit.selectAll()
    edit.setFocus()             # works now

    vbox = QVBoxLayout()
    vbox.addWidget(edit)
    self.setLayout(vbox)

之后,您必须MainWindow像这样将 as parent 传递给小部件:

newQuiz = Quiz(self)
于 2013-04-27T09:13:11.403 回答