PyQt4将焦点放在Widget上,因为它被MainWindow调用,并设置为CentralWidget



我想给焦点的QLineEdit尽快出现…在其他情况下(同一类中的所有小部件),这是可能的.setFocus() -但这里这不起作用。我的候选是.activateWindow().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文档中发现.activateWindow这个令人沮丧的"评论":"在Windows上,如果你在应用程序当前不是活动的时候调用这个,那么它将不会使它成为活动窗口。"-但我的意思是它是活动窗口(=主窗口),它只是活动窗口的中央小部件中的另一个小部件。(?)

如果你给小部件一个父类,它就会工作。

下面是小部件的init函数,带有一个新的父参数,用于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作为父级传递给小部件:

newQuiz = Quiz(self)

相关内容

  • 没有找到相关文章

最新更新