2013-04-23 37 views
0

我怎樣才能把東西放在主窗口中?我想在主窗口中創建一個線條編輯(在菜單欄下方,可能前面有一些描述文字)。這是如何完成的?我使用網格佈局和這個盒子佈局,沒有任何工作。 (SRY再瑣碎的問題,也有對pyside只有幾個教程在那裏,他們大多隻涵蓋了如何創建一個Windows的按鈕等。)把東西放在窗戶裏

import sys 
from PySide import QtGui, QtCore, QtWebKit 


class FirstClass(QtGui.QMainWindow, QtGui.QWidget): 

    def __init__(self): 
     super(FirstClass, self).__init__() 
     self.startingUI() 

    def startingUI(self): 

     self.setWindowTitle('Hauptfenster') 
     self.resize(800, 400) 
     self.statusBar() 

     #Menueinstellungen an sich 

     menue = self.menuBar() 

     #Actions des Menues: 
     #datei menue 
     menuleiste_datei = menue.addMenu('File') 

     datei_exit = QtGui.QAction('Exit', self) 
     datei_exit.setStatusTip('Close the programm') 
     menuleiste_datei.addAction(datei_exit) 
     datei_exit.triggered.connect(self.close) 

     #Einstellungen menue 
     menuleiste_configurations = menue.addMenu('Configurations') 
     configurations_settings = QtGui.QAction('Settings', self) 
     configurations_settings.setStatusTip('Configurations(Settings)') 
     menuleiste_configurations.addAction(configurations_settings) 
     configurations_settings.triggered.connect(self.newwindow) 

     self.lineedit = QtGui.QLineEdit() 
     self.layout = QtGui.QHBoxLayout() 
     self.layout.addWidget(self.lineedit) 
     self.setLayout(self.layout) 
     self.show() 

    def newwindow(self): 
     self.wid = QtGui.QWidget() 
     self.wid.resize(250, 150) 
     self.setWindowTitle('NewWindow') 
     self.wid.show() 

def main(): 

    app = QtGui.QApplication(sys.argv) 
    start = FirstClass() 
    sys.exit(app.exec_()) 

if __name__== '__main__': 
    main() 

回答

0

我不相信建立一個類多重繼承是推薦的最佳實踐。如果在FirstClass中找不到屬性,則從左到右搜索(QtGui.QMainWindowQtGui.QWidget)。從我的角度來看,這將變成支持和調試的噩夢。我的猜測是這是self.layout工作不正常的原因。

我爲QtGui.QMainWindowQtGui.QWidget做了單獨的分類。 FirstWindowClass將中央小部件設置爲FirstWidgetClassFirstWidgetClass有你的QLineEdit,我繼續前進,並插入一個標籤。我將QHBoxLayout更改爲QGridLayout,以幫助您瞭解其工作原理。

我與Python和Pyside這些過去幾個月的學習經歷一些提示:

  1. 請記住,您可以隨時看PyQt的例子,多數會直接與PySide模塊工作。
  2. 我推薦看看http://srinikom.github.io/pyside-docs/index.html,因爲很多模塊都有簡單的例子。
  3. 對於我的個人項目,我的Qt問題的很多解決方案都是用C++編寫的,所以不要害怕將它轉換爲python。

    import sys 
    from PySide import QtGui, QtCore, QtWebKit 
    
    class FirstWindowClass(QtGui.QMainWindow): 
        def __init__(self): 
         super(FirstWindowClass, self).__init__() 
    
         self.setWindowTitle('Hauptfenster') 
         self.resize(800, 400) 
         self.statusBar() 
    
         # Set central widget that expands to fill your window 
         self.main_widget = FirstWidgetClass(self) 
         self.setCentralWidget(self.main_widget) 
    
         #Menueinstellungen an sich 
    
         menue = self.menuBar() 
    
         #Actions des Menues: 
         #datei menue 
         menuleiste_datei = menue.addMenu('File') 
    
         datei_exit = QtGui.QAction('Exit', self) 
         datei_exit.setStatusTip('Close the programm') 
         menuleiste_datei.addAction(datei_exit) 
         datei_exit.triggered.connect(self.close) 
    
         #Einstellungen menue 
         menuleiste_configurations = menue.addMenu('Configurations') 
         configurations_settings = QtGui.QAction('Settings', self) 
         configurations_settings.setStatusTip('Configurations(Settings)') 
         menuleiste_configurations.addAction(configurations_settings) 
         configurations_settings.triggered.connect(self.newwindow) 
    
         # Open the window 
         self.show() 
    
        def newwindow(self): 
         self.wid = QtGui.QWidget() 
         self.wid.resize(250, 150) 
         self.wid.setWindowTitle('NewWindow') 
         self.wid.show() 
    
    
    class FirstWidgetClass(QtGui.QWidget): 
        def __init__(self, parent=None): 
         super(FirstWidgetClass, self).__init__() 
    
         self.label_example = QtGui.QLabel('Enter Data:') 
    
         self.lineedit = QtGui.QLineEdit() 
         self.layout = QtGui.QGridLayout() 
         self.layout.addWidget(self.label_example, 0, 0) 
         self.layout.addWidget(self.lineedit, 0, 1) 
         self.setLayout(self.layout) 
         self.show() 
    
    
    def main(): 
    
        app = QtGui.QApplication(sys.argv) 
        start = FirstWindowClass() 
        sys.exit(app.exec_()) 
    
    if __name__== '__main__': 
        main() 
    
+0

嗨THX答覆,好答案:) – JonnyPython 2013-04-27 10:17:55

相關問題