2013-04-26 43 views
6

我想在QLineEdit出現後立即將焦點...在其他情況下(同一班級內的所有小工具),可以使用.setFocus() - 但這裏不起作用。 我的候選人是.activateWindow().raise_(),但我無法弄清楚如何使用它們。PyQt4將焦點集中到Widget,因爲它被MainWindow調用並設置爲CentralWidget?

編輯:我的目標是能夠直接從鍵盤輸入到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中的其他窗口小部件。 (?)

回答

10

它適用於如果您給小部件父項。

以下是使用QWidget的新父參數的小部件的init函數。然後將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)