2014-04-12 14 views
1

我試圖在應用程序啓動時將焦點設置在QLineEdit小部件上,但由於某些原因它失敗。調用包含QLineEdit_object.setFocus()的方法並綁定到按鈕單擊,完美地工作。然而在啓動時,它似乎在小部件創建後設置爲初始化時根本不會執行。如何在應用程序啓動時將焦點置於小部件上?

在Python中使用PySide。

# coding=utf-8 
import sys 
import PySide.QtGui as QG 
import PySide.QtCore as QC 

class GG(QG.QMainWindow): 
    def __init__(self): 
     super(GG, self).__init__() 
     self.move(0,0) 
     self.resize(400,300) 
     self.setWindowTitle('Demo') 

     self.tabw = QG.QTabWidget() 
     self.tab1 = Tab1() 
     self.tab2 = Tab2() 

     self.tabw.addTab(self.tab1, 'Tab1') 
     self.tabw.addTab(self.tab2, 'Tab2') 

     hbox = QG.QHBoxLayout() 
     hbox.addWidget(self.tabw) 

     self.setCentralWidget(self.tabw) 
     self.setLayout(hbox) 
     self.show() 

class Tab1(QG.QWidget): 
    def __init__(self): 
     super(Tab1, self).__init__() 

     self.btns() 
     self.inputt() 
     self.layoutz() 
     self.inp.setFocus() # doesn't set the focus on startup ? 
     self.show() 

    def inputt(self): 
     self.inp = QG.QLineEdit('', self) 

    def btns(self): 
     self.btn1 = QG.QPushButton('Button1', self) 
     self.btn1.clicked.connect(self.focusit) # works just fine 

    def layoutz(self): 
     vbox = QG.QVBoxLayout() 
     vbox.addWidget(self.btn1) 
     vbox.addStretch(1) 
     vbox.addWidget(self.inp) 
     self.setLayout(vbox) 

    def focusit(self): 
     self.inp.setFocus() # works just fine 


class Tab2(Tab1): 
    def __init__(self): 
     super(Tab2, self).__init__() 


def main(): 
    app = QG.QApplication(sys.argv) 
    a = GG() 
    sys.exit(app.exec_()) 

if __name__ == '__main__': 
    main() 
+0

工作正常,我。請提供一個小型自包含示例,說明您遇到的問題。 – ekhumoro

+0

這是:[LINK](http://pastebin.com/VkLYCFZf) – hmnhmn

回答

1

好了,以後有的玩,我想出了這個解決方案:

import sys 
import PySide.QtGui as QG 
import PySide.QtCore as QC 

class GG(QG.QMainWindow): 
    def __init__(self): 
     super(GG, self).__init__() 
     self.move(0,0) 
     self.resize(400,300) 
     self.setWindowTitle('Demo') 

     self.tabw = QG.QTabWidget() 
     self.tab1 = Tab1() 
     self.tab2 = Tab2() 

     self.tabw.addTab(self.tab1, 'Tab1') 
     self.tabw.addTab(self.tab2, 'Tab2') 

     hbox = QG.QHBoxLayout() 
     hbox.addWidget(self.tabw) 

     self.setCentralWidget(self.tabw) 
     self.setLayout(hbox) 
     self.tab2.inp.setFocus() # setting focus right here 
     self.tab1.inp.setFocus() # and here; notice the order 
     self.show() 

class Tab1(QG.QWidget): 
    def __init__(self): 
     super(Tab1, self).__init__() 

     self.btns() 
     self.inputt() 
     self.layoutz() 
     self.show() 

    def inputt(self): 
     self.inp = QG.QLineEdit('', self) 

    def btns(self): 
     self.btn1 = QG.QPushButton('Button1', self) 
     self.btn1.clicked.connect(self.focusit) 

    def layoutz(self): 
     vbox = QG.QVBoxLayout() 
     vbox.addWidget(self.btn1) 
     vbox.addStretch(1) 
     vbox.addWidget(self.inp) 
     self.setLayout(vbox) 

    def focusit(self): 
     self.inp.setFocus() 


class Tab2(Tab1): 
    def __init__(self): 
     super(Tab2, self).__init__() 


def main(): 
    app = QG.QApplication(sys.argv) 
    a = GG() 
    sys.exit(app.exec_()) 

if __name__ == '__main__': 
    main() 
相關問題