2013-04-26 45 views
6

Tôi muốn tập trung vào một QLineEdit ngay khi nó xuất hiện ... trong các trường hợp khác (tất cả các Widget trong cùng một lớp) có thể với .setFocus() - nhưng ở đây điều này không hiệu quả. Các ứng cử viên của tôi là .activateWindow().raise_(), nhưng tôi không thể tìm ra cách sử dụng chúng.PyQt4 Đặt tiêu điểm cho Widget khi nó được gọi bởi MainWindow và đặt làm CentralWidget?

chỉnh sửa: Mục tiêu của tôi là có thể nhập trực tiếp vào QLineEdit từ bàn phím mà không cần nhấn phím tab hoặc nhấp chuột trước.

Dưới đây là một ví dụ về các bộ phận liên quan trong câu hỏi (chức năng):

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

Nếu bạn thấy tôi khủng khiếp lạm dụng Python hoặc PyQt4 ... cảm thấy tự do để chỉ trích, tôi muốn học.

chỉnh sửa: Tôi tìm thấy trong PySide Docs cho .activateWindow "nhận xét" không khuyến khích này: "Trên Windows, nếu bạn đang gọi điều này khi ứng dụng hiện không hoạt động thì nó sẽ không làm cho cửa sổ hoạt động". - Nhưng tôi có nghĩa là nó là cửa sổ hoạt động (= MainWindow) nó chỉ là một Widget khác trong CentralWidget của cửa sổ đang hoạt động. (?)

Trả lời

10

Tính năng này hoạt động nếu bạn cung cấp tiện ích con cho phụ huynh.

Đây là hàm init của tiện ích con có đối số gốc mới, được sử dụng cho QWidget. Sau đó, QWidget được sử dụng làm cha mẹ cho nhãn.

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) 

Sau đó bạn phải vượt qua MainWindow như cha mẹ để các phụ tùng như thế này:

newQuiz = Quiz(self)