In this Pyside2 article iam going to talk about Layout Management in Pyside2, basically we are using QVBoxLayout and also QHBoxLayout for this tutorial. also you can watch more articles on Python GUI Development with Pyside2 in the below links.
Check Python GUI Development With Pyside2
1: Getting Started With Pyside2 | Qt For Python
2: Pyside2 GUI Creating First Window
3: Pyside2 GUI Creating Window Icon
4: Pyside2 GUI How To Create Icon Modes
5: Pyside2 GUI How To Create Tooltip
6: Pyside2 GUI QPushButton With Signal And Slot
7: Pyside2 GUI Making Center The Window
8: Python GUI How To Create AboutBox
9: Python GUI How to Create Digital Clock in Pyside2
10: How To Create StatusBar In Pyside2
11: Pyside2 Creating QProgressBar
Also the QHBoxLayout is used to construct horizontal box layout objects and the QVBoxLayout is used to construct vertical box layout objects.
So now this is the complete code for Pyside2 Layout Management With QVBoxLayout & QHBoxLayout
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
from PySide2.QtWidgets import QApplication, QWidget, QDialog, QHBoxLayout, QVBoxLayout, QGroupBox, QPushButton import sys from PySide2.QtGui import QIcon, QFont class Window(QWidget): def __init__(self): super().__init__() self.setWindowTitle("Layout Managment") self.setGeometry(300,200,500,400) self.setIcon() self.createLayout() vbox = QVBoxLayout() vbox.addWidget(self.groupBox) self.setLayout(vbox) self.show() def setIcon(self): appIcon = QIcon("icon.png") self.setWindowIcon(appIcon) def createLayout(self): self.groupBox = QGroupBox("Please Choose One Language") self.groupBox.setFont(QFont("Sanserif", 13)) hbox =QHBoxLayout() button = QPushButton("CSS", self) button.setIcon(QIcon("css.png")) button.setMinimumHeight(40) hbox.addWidget(button) button1 = QPushButton("C++", self) button1.setIcon(QIcon("cpp.png")) button1.setMinimumHeight(40) hbox.addWidget(button1) button2 = QPushButton("Javascript", self) button2.setIcon(QIcon("javascript.png")) button2.setMinimumHeight(40) hbox.addWidget(button2) self.groupBox.setLayout(hbox) myapp = QApplication(sys.argv) window = Window() myapp.exec_() sys.exit() |
OK in the above code first we have imported our classes from Pyside2 library
1 2 3 |
from PySide2.QtWidgets import QApplication, QWidget, QDialog, QHBoxLayout, QVBoxLayout, QGroupBox, QPushButton import sys from PySide2.QtGui import QIcon, QFont |
And this is our main window class that inherits from QWidget, and we are going to add a few requirements for our window in this class like title, width, height and also we are calling our two methods in this class. after that we create our QVboxLayout in our class.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
class Window(QWidget): def __init__(self): super().__init__() self.setWindowTitle("Layout Managment") self.setGeometry(300,200,500,400) self.setIcon() self.createLayout() vbox = QVBoxLayout() vbox.addWidget(self.groupBox) self.setLayout(vbox) self.show() |
Also this method is for setting our window icon
1 2 3 |
def setIcon(self): appIcon = QIcon("icon.png") self.setWindowIcon(appIcon) |
So now this is the method that we are going to create our Layout, basically we are going to add three QPushButton in our QHBoxLayout.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
def createLayout(self): self.groupBox = QGroupBox("Please Choose One Language") self.groupBox.setFont(QFont("Sanserif", 13)) hbox =QHBoxLayout() button = QPushButton("CSS", self) button.setIcon(QIcon("css.png")) button.setMinimumHeight(40) hbox.addWidget(button) button1 = QPushButton("C++", self) button1.setIcon(QIcon("cpp.png")) button1.setMinimumHeight(40) hbox.addWidget(button1) button2 = QPushButton("Javascript", self) button2.setIcon(QIcon("javascript.png")) button2.setMinimumHeight(40) hbox.addWidget(button2) self.groupBox.setLayout(hbox) |
Also every Pyside2 application must create an application object. The sys.argv
parameter is a list of arguments from a command line.
Python scripts can be run from the shell. It is a way how we can control the startup of our scripts.
1 |
myapp = QApplication(sys.argv) |
Finally, we enter the mainloop of the application. The event handling starts from this point. The mainloop receives events from the window system and dispatches them to the application widgets. The mainloop ends if we call the exit()
method or the main widget is destroyed. The sys.exit()
method ensures a clean exit. The environment will be informed how the application ended.
The exec_()
method has an underscore. It is because the exec
is a Python keyword. And thus, exec_()
was used instead
1 2 |
myapp.exec_() sys.exit() |
So now run the complete code and this will be the result
Also you can watch the complete video for this article
Subscribe and Get Free Video Courses & Articles in your Email
First of all, thank you so much for uploading good lecture materials.
It is a very valuable resource for me to study.
It didn’t work if I changed this part( class Window(QWidget): ) to this one ( class Window(QMainWindow):.)
Can you tell what is the cause? Is it not possible here( QMainWindow )? ps.(Because I’m Korean, I’m not good at English. I used a translator.)
yea there are difference between these two, A QWidget is the base class for all drawable classes . Any QWidget-based class can be shown as a window by showing it when it has no parent.
and QMainwindow is used for the main window, and It has places for a menu bar, a status bar, a toolbar, and other widgets