2013-04-26 3 views
6

QLineEditが表示されるとすぐにFocusを出したいと思っています。他の場合(同じクラス内のすべてのウィジェット)、.setFocus()で可能でしたが、ここでは動作しません。 私の受験者は.activateWindow().raise_()ですが、どのように使用するのか分かりませんでした。PyQt4 MainWindowから呼び出され、CentralWidgetとして設定されているので、ウィジェットにフォーカスを当てるか?

編集:私の目標は、tabキーを押すか、あらかじめマウスでクリックすることなくキーボードから直接QLineEditを入力することです。ここで

質問(機能)の要部例:あなたはひどくPythonやPyQt4を悪用私を見ている場合は

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() 

...批判すること自由に感じ、私は知りたいです。

編集:の.activateWindowにあります。このコメントは "コメント"です: "Windowsでは、アプリケーションが現在アクティブなアプリケーションではないときに呼び出すと、アクティブなウィンドウになりません。 - しかし、私はそれがアクティブなウィンドウ(= MainWindow)であることを意味します。これは、アクティブなウィンドウのCentralWidget内の他のウィジェットです。 (?)

答えて

10

ウィジェットに親を与えると機能します。

ここに、新しい親引数を持つウィジェットのinit関数があります。これはQWidgetで使用されます。次に、QWidgetはラベルの親として使用されます。

newQuiz = Quiz(self) 

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を渡す必要があります

関連する問題