2013-04-26 16 views
6

Bir QLineEdit'e en kısa sürede görünmesini istiyorum ... diğer durumlarda (aynı sınıftaki tüm Widget'lar) .setFocus() ile mümkün oldu - ama işte bu işe yaramıyor. Adaylarım .activateWindow() ve .raise_(), ancak bunları nasıl kullanacağımı anlayamadım.PyQt4 MainWindow tarafından çağrıldığı ve CentralWidget olarak ayarlandığı gibi Widget'a Odak Verilsin mi?

düzenleme: Hedefim, QLineEdit'e klavyeden doğrudan tab anahtarını basmadan veya fare ile önceden tıklamadan yazabilmenizdir. İşte

soru (fonksiyonel) ilgili bölümden bir örnek:

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 veya PyQt4 kötüye korkunç beni görüyorsanız ... eleştirmek çekinmeyin, ben öğrenmek istiyorum.

düzenleme: .activateWindow için PySide Docs bu "" yorumunu cesaret kırıcı olarak buldum: "Uygulamada şu anda etkin olan uygulama değilse, Windows'da, etkin pencereyi yapmaz." - Ama ben aktif pencere (= MainWindow) olduğu etkin pencerenin CentralWidget içinde başka bir Widget olduğu anlamına gelir. (?)

cevap

10

Widget'a bir ebeveyn verirseniz çalışır.

Burada, widget'ın QWidget için kullanılan yeni bir üst argümanı olan init işlevi yer almaktadır. Daha sonra QWidget etiket için ebeveyn olarak kullanılır.

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) 

Bundan sonra böyle Widget'a ebeveyn olarak MainWindow geçmek zorunda