2017-03-17 4 views
0

Ich möchte mit einem QSplitter das MainWindow auf zwei Seiten aufteilen. Auf der linken Seite möchte ich ein Layout mit einer Ordneransicht und auf der rechten Seite ein anderes Layout, in dem ich einige Dinge darstellen werde. Aber ich kann nur Widgets auf dem QSplitter hinzufügen und die Layouts sind keine Widgets. Die einzigen ähnlichen Fragen fand ich waren diese:PyQt - Layouts zu QSplitter hinzufügen

http://www.qtcentre.org/threads/16856-QSplitter-multiple-layouts-how https://forum.qt.io/topic/8197/solved-qsplitter-and-qvboxlayout-problem

So, nach den obigen Links, mein Plan ist es, die zwei Layouts zu erstellen, so dass sie dann zu zwei QWidgets hinzufügen (mit setLayout) und dann Fügen Sie diese QWidgets zu QSplitter hinzu (mit addWidget). Ich habe versucht, das auf meinen Code anzuwenden, aber leider, wenn ich das Layout zum Widget hinzufüge, zeigt sich nichts!

Gibt es einen anderen Weg zu erreichen, was ich will? Habe ich die Antworten falsch verstanden?

Hier ist der Code. Ich sende Ihnen nur das Layout der Ordneransicht, damit der Code einfacher wird. Auch ich bin völlig neu in pyqt und objektorientierte Programmierung, so dass jeder zu begrüßen ist, wie es zu verbessern ist willkommen!

Vielen Dank im Voraus!

import sys 
from PyQt5.QtWidgets import * 
from PyQt5.QtGui import * 
from PyQt5.QtCore import * 

class Window(QMainWindow): 

    def __init__(self, parent=None): 

     super(Window, self).__init__(parent) 
     self.UI() 

    def UI(self): 

     self.central_widget = QStackedWidget() 
     self.setCentralWidget(self.central_widget) 

     self.statusBar().showMessage("Ready") 

     page1 = FirstWidget(self) 
     page1.visualize_btn.clicked.connect(self.P_2) 
     self.central_widget.addWidget(page1)   

     self.setGeometry(10, 10, 800, 500) #All three methods have been inherited from the QWidget class. 
     self.showMaximized() 
     self.setWindowTitle('PTV') 
     self.setWindowIcon(QIcon('tuc_logo.png')) 

    def P_2(self): 

     page2 = VisualizeWidget(self) 
     self.central_widget.addWidget(page2) 
     self.central_widget.setCurrentWidget(page2) 


class FirstWidget(QWidget): 

    def __init__(self, parent=None): 
     super(FirstWidget, self).__init__(parent) 
     self.buttons() 

    def buttons(self): 

     self.btn2 = QPushButton("Visualize") 
     self.buttonsLayout = QVBoxLayout() 
     self.buttonsLayout.addWidget(self.btn2) 
     self.visualize_btn = self.btn2   
     self.setLayout(self.buttonsLayout) 


class VisualizeWidget(QWidget): 

    def __init__(self, parent=None): 
     super(VisualizeWidget, self).__init__(parent) 


     self.dirmodel = QFileSystemModel()   
     self.dirmodel.setFilter(QDir.NoDotAndDotDot | QDir.AllDirs) # Don't show files, just folders 

     self.folder_view = QTreeView(parent=self); 
     self.folder_view.setModel(self.dirmodel) 
     self.folder_view.clicked[QModelIndex].connect(self.clicked) 

     self.now_layout = QVBoxLayout() 
     self.now_layout.addWidget(self.folder_view) 

     #self.setLayout(self.now_layout) 

     #HERE is where I'm trying to add the layout to the widget. 
     self.left_widget = QWidget() 
     self.left_widget.setLayout(self.now_layout)    


    def set_path(self): 
     self.dirmodel.setRootPath("") 

    def clicked(self, index): 
     index = self.selectionModel.currentIndex() 
     dir_path = self.dirmodel.filePath(index) 

     self.filemodel.setRootPath(dir_path) 
     self.file_view.setRootIndex(self.filemodel.index(dir_path))   

def main(): 
    app = QApplication(sys.argv) 
    win = Window() 
    win.show() 
    app.exec_() 

if __name__ == '__main__': 
    sys.exit(main()) 

Antwort

0

Ich habe eigentlich nicht verstanden noch, was ich falsch mache, aber ich bin Entsendung ein Arbeitscode, falls es jemand anderes in der Zukunft hilft.

Jetzt sind die beiden Layouts mit einem QSplitter gespalten.

import sys 
from PyQt5.QtWidgets import * 
from PyQt5.QtGui import * 
from PyQt5.QtCore import * 

class Window(QMainWindow): 

    def __init__(self, parent=None): 

     super(Window, self).__init__(parent) 
     self.UI() 

    def UI(self): 

     self.central_widget = QStackedWidget() 
     self.setCentralWidget(self.central_widget) 

     self.statusBar().showMessage("Ready") 

     page1 = FirstWidget(self) 
     page1.visualize_btn.clicked.connect(self.P_2) 
     self.central_widget.addWidget(page1)   

     self.setGeometry(10, 10, 800, 500) #All three methods have been inherited from the QWidget class. 
     self.showMaximized() 
     self.setWindowTitle('PTV') 
     self.setWindowIcon(QIcon('tuc_logo.png')) 

    def P_2(self): 

     page2 = VisualizeWidget(self) 
     self.central_widget.addWidget(page2) 
     self.central_widget.setCurrentWidget(page2) 


class FirstWidget(QWidget): 

    def __init__(self, parent=None): 
     super(FirstWidget, self).__init__(parent) 
     self.buttons() 

    def buttons(self): 

     self.btn2 = QPushButton("Visualize") 
     self.buttonsLayout = QVBoxLayout() 
     self.buttonsLayout.addWidget(self.btn2) 
     self.visualize_btn = self.btn2   
     self.setLayout(self.buttonsLayout) 


class VisualizeWidget(QWidget): 

    def __init__(self, parent=None): 
     super(VisualizeWidget, self).__init__(parent) 


     #Creation of the left layout 
     self.dirmodel = QFileSystemModel()   
     self.dirmodel.setFilter(QDir.NoDotAndDotDot | QDir.AllDirs) # Don't show files, just folders 

     self.folder_view = QTreeView(parent=self); 
     self.folder_view.setModel(self.dirmodel) 
     self.folder_view.clicked[QModelIndex].connect(self.clicked) 

     self.selectionModel = self.folder_view.selectionModel() 

     self.now_layout = QVBoxLayout() 
     self.now_layout.addWidget(self.folder_view) 


     self.left_widget = QWidget() 
     self.left_widget.setLayout(self.now_layout) 


     #Creation of the right layout 
     #self.right_widget = QTextEdit(); 

     self.btn1 = QPushButton('btn1') 

     self.right_layout = QVBoxLayout() 
     self.right_layout.addWidget(self.btn1) 

     self.right_widget = QWidget() 
     self.right_widget.setLayout(self.right_layout) 




     splitter_filebrowser = QSplitter(Qt.Horizontal) 
     splitter_filebrowser.addWidget(self.left_widget) 
     splitter_filebrowser.addWidget(self.right_widget) 
     splitter_filebrowser.setStretchFactor(1, 1) 

     hbox = QHBoxLayout(self) 
     hbox.addWidget(splitter_filebrowser) 

     self.setLayout(hbox) 



    def set_path(self): 
     self.dirmodel.setRootPath("") 

    def clicked(self, index): 
     index = self.selectionModel.currentIndex() 
     dir_path = self.dirmodel.filePath(index) 

     self.filemodel.setRootPath(dir_path) 
     self.file_view.setRootIndex(self.filemodel.index(dir_path))   

def main(): 
    app = QApplication(sys.argv) 
    win = Window() 
    win.show() 
    app.exec_() 

if __name__ == '__main__': 
    sys.exit(main()) 
Verwandte Themen