2013-04-26 6 views
6

Chcę dać Focus QLineEdit, jak tylko się pojawi ... w innych przypadkach (wszystkie Widgety w tej samej klasie) było to możliwe z .setFocus() - ale tutaj to nie działa. Moi kandydaci to: .activateWindow() i .raise_(), ale nie mogłem wymyślić, jak z nich korzystać.PyQt4 Daje skupienie na widżecie, jak nazywa go MainWindow i ustawiony jako CentralWidget?

edytuj: Moim celem jest możliwość wpisania w QLineEdit bezpośrednio z klawiatury bez konieczności uderzania w klawisz tab lub wcześniej klikania myszą.

Tutaj przykładem odpowiednich części na pytanie (funkcjonalne):

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

Jeśli widzisz mnie strasznie nadużywają Python lub PyQt4 ... czuć się swobodnie krytykować, chcę się nauczyć.

edytuj: Znalazłem w PySide Docs dla tego zniechęcającego "komentarza": "W Windowsie, jeśli dzwonisz, gdy aplikacja nie jest aktualnie aktywna, to nie sprawi, że będzie to aktywne okno." - Ale chodzi mi o to, że jest to aktywne okno (= MainWindow), to po prostu inny widget w CentralWidget aktywnego okna. (?)

Odpowiedz

10

Działa, jeśli podasz widget rodzicowi.

Oto funkcja inicjalizacyjna widgetu z nowym argumentem macierzystym, używana dla QWidget. Następnie QWidget jest używany jako rodzic dla etykiety.

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) 

Potem trzeba przejść MainWindow jako rodzica do widżetu jak ten:

newQuiz = Quiz(self) 
Powiązane problemy