study/python

PyQt5 : widget and layout

jjikky 2020. 11. 26. 05:31
반응형

Horizontal Box Layout

# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import *

class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.setGeometry(350, 150, 400, 400)  # 창의 위치와 크기
        self.setWindowTitle("Horizontal Box Layout")
        self.UI()
        
    def UI(self):
        hbox = QHBoxLayout()    #horizontal box layout
        button1 = QPushButton("Button1",self)
        button2 = QPushButton("Button2")
        button3 = QPushButton("Button3")
        # hbox.addStretch() ,  고정된 크기로 지정
        hbox.addWidget(button1)
        hbox.addWidget(button2)
        hbox.addWidget(button3)
        # hbox.addStretch()
        self.setLayout(hbox)
        self.show()
        
   
            
def main():
    App = QApplication(sys.argv)
    window = Window()
    sys.exit(App.exec_())
    
if __name__ =='__main__':
    main()

 

 

 

Vertical Box Layout

# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import *

class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.setGeometry(350, 150, 400, 400)  # 창의 위치와 크기
        self.setWindowTitle("Vertical Box Layout")
        self.UI()
        
    def UI(self):
        vbox = QVBoxLayout()    #Vertical box layout
        button1 = QPushButton("Save")
        button2 = QPushButton("Exit")
        button3 = QPushButton("Hello")
        vbox.addStretch()    # 고정된 크기로 지정
        vbox.addWidget(button1)
        vbox.addWidget(button2)
        vbox.addWidget(button3)
        vbox.addStretch()
        self.setLayout(vbox)
        self.show()
        
   
            
def main():
    App = QApplication(sys.argv)
    window = Window()
    sys.exit(App.exec_())
    
if __name__ =='__main__':
    main()

 

 

 

Vertical and Horizontal box layout

# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import *

class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.setGeometry(350, 150, 400, 400)  # 창의 위치와 크기
        self.setWindowTitle("Vertical and horizontal Box Layout")
        self.UI()
        
    def UI(self):
        mainLayout = QVBoxLayout()
        topLayout = QHBoxLayout()
        bottomLayout = QHBoxLayout()
        mainLayout.addLayout(topLayout)
        mainLayout.addLayout(bottomLayout)
        
        cbox = QCheckBox()
        rbtn = QRadioButton()
        combo = QComboBox()
        btn1 = QPushButton()
        btn2 = QPushButton()
        
        topLayout.setContentsMargins(150,10,20,20) # left, top, right, bottom
        topLayout.addWidget(cbox)
        topLayout.addWidget(rbtn)
        topLayout.addWidget(combo)
        bottomLayout.setContentsMargins(150,10,150,10)
        bottomLayout.addWidget(btn1)
        bottomLayout.addWidget(btn2)
        
        self.setLayout(mainLayout)
        
        self.show()
        
            
def main():
    App = QApplication(sys.argv)
    window = Window()
    sys.exit(App.exec_())
    
if __name__ =='__main__':
    main()

 

 

 

form layout

# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import *

class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.setGeometry(350, 150, 400, 400)  # 창의 위치와 크기
        self.setWindowTitle("Form Layout")
        self.UI()
        
    def UI(self):
        formLayout = QFormLayout()
        name_txt = QLabel("Name : ")
        name_input = QLineEdit()
        pass_txt = QLabel("Password : ")
        pass_input = QLineEdit()
        hbox = QHBoxLayout()
        hbox.addStretch()
        hbox.addWidget(QPushButton("Enter"))
        hbox.addWidget(QPushButton("Exit"))
        
        hbox1 = QHBoxLayout()
        hbox1.addWidget(QLineEdit())
        hbox1.addWidget(QLineEdit())
        
        formLayout.addRow(name_txt,hbox1)
        formLayout.addRow(pass_txt,pass_input)
        formLayout.addRow(QLabel("Country : "),QComboBox())
        formLayout.addRow(hbox)
        
        self.setLayout(formLayout)
                       
        self.show()
        
            
def main():
    App = QApplication(sys.argv)
    window = Window()
    sys.exit(App.exec_())
    
if __name__ =='__main__':
    main()

 

 

 

Silider Widget

# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QFont

class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.setGeometry(350, 150, 600, 500)  # 창의 위치와 크기
        self.setWindowTitle("Slider Widget")
        self.UI()
        
    def UI(self):
        vbox = QVBoxLayout()
        self.slider = QSlider(Qt.Horizontal)
        self.slider.setMinimum(0)
        self.slider.setMaximum(100)
        self.slider.setTickPosition(QSlider.TicksAbove)
        self.slider.setTickInterval(10)
        self.slider.valueChanged.connect(self.getValue)
        self.text1 = QLabel("0")
        self.text1.setAlignment(Qt.AlignCenter)
        self.text2 = QLabel("Hello Python")
        
        vbox.addStretch()
        vbox.addWidget(self.text1)
        vbox.addWidget(self.text2)
        vbox.addWidget(self.slider)
        self.setLayout(vbox)
                       
        self.show()
        
    def getValue(self):
        val = self.slider.value()
        print(val)
        self.text1.setText(str(val))
        fontSize = self.slider.value()
        font = QFont("Times",fontSize)
        self.text2.setFont(font)
        
            
def main():
    App = QApplication(sys.argv)
    window = Window()
    sys.exit(App.exec_())
    
if __name__ =='__main__':
    main()

 

 

 

Table Widget

# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import *

class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.setGeometry(350, 150, 400, 400)  # 창의 위치와 크기
        self.setWindowTitle("table widget")
        self.UI()
        
    def UI(self):
        vbox = QVBoxLayout()
        self.table = QTableWidget()
        btn = QPushButton("Get")
        self.table.setRowCount(5)
        self.table.setColumnCount(3)
        self.table.setHorizontalHeaderItem(0,QTableWidgetItem("Name"))
        self.table.setHorizontalHeaderItem(1,QTableWidgetItem("Surname"))
        self.table.setHorizontalHeaderItem(2,QTableWidgetItem("Address"))
        # self.table.horizontalHeader().hide()
        # self.table.verticalHeader().hide()
        self.table.setItem(0,0,QTableWidgetItem("First Item"))
        self.table.setItem(0,1,QTableWidgetItem("2th Item"))
        self.table.setItem(1,2,QTableWidgetItem("3th Item"))
        self.table.setItem(4,2,QTableWidgetItem("4th Item"))
        self.table.setEditTriggers(QAbstractItemView.NoEditTriggers)
        self.table.doubleClicked.connect(self.doubleClicked)
        btn.clicked.connect(self.getValue)
        vbox.addWidget(self.table)
        vbox.addWidget(btn)
        self.setLayout(vbox)
        self.show()
        
        
    def getValue(self):
        for item in self.table.selectedItems():
            print(item.text(),item.row(),item.column())
       
    def doubleClicked(self):
        for item in self.table.selectedItems():
            print(item.text(),item.row(),item.column())
        
            
def main():
    App = QApplication(sys.argv)
    window = Window()
    sys.exit(App.exec_())
    
if __name__ =='__main__':
    main()

table 선택 후 Get 클릭시 내용과 위치 출력

 

 

 

Tab Widget

# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import *

class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.setGeometry(350, 150, 600, 600)  # 창의 위치와 크기
        self.setWindowTitle("Tab Widget")
        self.UI()
        
    def UI(self):
        mainLayout = QVBoxLayout()
        self.tabs = QTabWidget()
        
        self.tab1=QWidget()
        self.tab2=QWidget()
        self.tab3=QWidget()
        self.tabs.addTab(self.tab1,"First Tab")
        self.tabs.addTab(self.tab2,"Second Tab")
        self.tabs.addTab(self.tab3,"Last Tab")
        #############Widget###################
        vbox = QVBoxLayout()
        hbox = QHBoxLayout()
        self.text = QLabel("Hello Python")
        self.btn1 = QPushButton("First Tab")
        self.btn1.clicked.connect(self.btnFunc)
        self.btn2 = QPushButton("Second Tab")
        vbox.addWidget(self.text)
        vbox.addWidget(self.btn1)
        hbox.addWidget(self.btn2)
        self.tab1.setLayout(vbox)
        self.tab2.setLayout(hbox)
        
        mainLayout.addWidget(self.tabs)
        self.setLayout(mainLayout)

        self.show()
        
    def btnFunc(self):
        self.text.setText("Button is active")
            
def main():
    App = QApplication(sys.argv)
    window = Window()
    sys.exit(App.exec_())
    
if __name__ =='__main__':
    main()

하단 First Tab 클릭 전, 후

 

 

 

Menu Widget

# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import QIcon
from PyQt5.QtCore import Qt

class Window(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setGeometry(350, 150, 600, 600)  # 창의 위치와 크기
        self.setWindowTitle("Menu Widget")
        self.UI()
        
    def UI(self):
        #######################  Main Menu  #######################
        menubar = self.menuBar()
        file = menubar.addMenu("File")
        edit = menubar.addMenu("Edit")
        code = menubar.addMenu("Code")
        helpMenu = menubar.addMenu("Help")
        
        ####################### Sub Menu Items ####################
        new = QAction("New Project", self)
        new.setShortcut("Ctrl+O")
        file.addAction(new)
        exit = QAction("Exit",self)
        exit.setIcon((QIcon("icons/exit.png")))
        exit.triggered.connect(self.exitFunc)
        file.addAction(exit)
        
        ####################### ToolBar ###########################
        tb = self.addToolBar("My Toolbar")
        tb.setToolButtonStyle(Qt.ToolButtonTextUnderIcon)
        newTb = QAction(QIcon('add.png'),"New",self)
        tb.addAction(newTb)
        openTb = QAction(QIcon('cart.png'),"Open",self)
        tb.addAction(openTb)
        saveTb = QAction(QIcon('sell.png'),"Save",self)
        tb.addAction(saveTb)
        exitTb = QAction(QIcon('user.png'),"Exit",self)
        exitTb.triggered.connect(self.exitFunc)
        tb.addAction(exitTb)
        tb.actionTriggered.connect(self.btnFunc)
        self.combo = QComboBox()
        self.combo.addItems(["Spiderman","Superman","Batman"])
        tb.addWidget(self.combo)
        self.show()
        
    def exitFunc(self):
        mbox = QMessageBox.information(self, "Warning","Are you sure to exit?",QMessageBox.Yes|QMessageBox.No,QMessageBox.No)
        if mbox == QMessageBox.Yes:
            sys.exit()
            
    def btnFunc(self,btn):
        if btn.text() == "New":
            print("You clicked new button")
        elif btn.text() == "Open":
            print("You clicked open button")
        else:
            print("You clicked save button")
  
            
def main():
    App = QApplication(sys.argv)
    window = Window()
    sys.exit(App.exec_())
    
if __name__ =='__main__':
    main()

반응형