PyQt5 : widget and layout

2020. 11. 26. 05:31·study/python
반응형

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()

반응형

'study > python' 카테고리의 다른 글

클래스 상속과 고급 객체 지향 기능  (0) 2020.12.02
객체 지향 프로그래밍과 절차적 프로그래밍  (0) 2020.12.02
PyQt5  (0) 2020.11.24
Matplotlib - 그래프 그리기2  (0) 2020.11.16
Matplotlib - 그래프 그리기  (0) 2020.11.09
'study/python' 카테고리의 다른 글
  • 클래스 상속과 고급 객체 지향 기능
  • 객체 지향 프로그래밍과 절차적 프로그래밍
  • PyQt5
  • Matplotlib - 그래프 그리기2
jjikky
jjikky
  • jjikky
    jikky.env
    jjikky
  • 전체
    오늘
    어제
    • 분류 전체보기
      • React
      • Node.js
        • TDD
        • Node.js
        • mern
        • OAuth
        • js_facebook login
      • Coding Test
        • 백준 알고리즘
        • CodeUp
        • 코테 이론
      • Js
        • Javascript
      • study
        • python
        • android
        • Big data analysis
        • Logic Circuit
      • git
      • 개발일지
      • 게임기획
      • Docker
      • IPFS
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    git 유용한 명령어
    ipfs add
    파이썬 그리디
    NFT Marketplace
    파이썬
    Python
    코딩테스트
    파이썬 완전탐색
    빅데이터
    Ipfs
    verilog할당문
    UI
    NFT IPFS
    안드로이드
    범주형 자료
    ifps 네트워크 지연
    verilog
    그리디 알고리즘
    파이썬 딕셔너리
    nft
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
jjikky
PyQt5 : widget and layout
상단으로

티스토리툴바