반응형

파이썬 GUI PyQt5(5) - QListView 간단하게 사용하기

 

리스트에 있는 데이터를 QListVIew를 사용하여, 간단하게 list view를 출력하는 프로그램을 만들어 보겠습니다.

 

1. QT Designer로 List View 추가하기

리스트를 보여주기 위해 List View 컴포넌트를 추가하고 Object 이름을 listView로 지정하였습니다. 

2. 파이썬 코드로 코드 작성하기

1. numbers라는 리스트를 만들어 데이터를 추가하고,

2. 그 리스트를 list view에 넣기 위해 QStandardItemModel() 클래스로 모델을 생성하였습니다. 

QStandardItemModel() 클래스는 사용자 지정 데이터를 저장하기 위한 일반 모델을 제공하는 클래스입니다. 

3. 생성된 모델에 numbers list의 데이터를 가지고, 각 데이터에 대하여 모델 아이템을 추가하였습니다.

4. 그리고 이렇게 만들어진 모델을 listView의 setModel 함수로 설정하도록 하였습니다.   

(listView는 Qt Designer로 만들었기 때문에 참조할 수 있습니다.)

    def showList(self):
        numbers = ["One", "Two", "Three", "Four"]

        model = QStandardItemModel() # 모델을 생성합니다. 
        for x in numbers: #모델에 numbers의 아이템을 모두 추가합니다. 
            model.appendRow(QStandardItem(x))
        self.ui.listView.setModel(model) # listView에 만들어진 모델을 설정합니다.

3. 전체 코드

import sys
from PyQt5 import QtWidgets
from PyQt5.QtGui import QStandardItemModel
from PyQt5.QtGui import QStandardItem
from PyQt5 import uic

class MyApp(QtWidgets.QDialog):
    def __init__(self, parent = None):
        super().__init__(parent)
        self.ui = uic.loadUi("./file/myapp.ui", self)
        self.ui.show()
        self.showList()

    def showList(self):
        numbers = ["One", "Two", "Three", "Four"]

        model = QStandardItemModel()
        for x in numbers:
            model.appendRow(QStandardItem(x))
        self.ui.listView.setModel(model)


app = QtWidgets.QApplication(sys.argv)
me = MyApp()
sys.exit(app.exec())
반응형
반응형

파이썬 GUI PyQt5(4) - Horizontal / Vertical Slider 사용하기

 

1. Qt Designer로 Horizontal / Vertical Slider 생성

Horizontal Slider와 Vertical Slider 컴포넌트와 Label Text 컴포넌트를 생성합니다. 

그리고 각 Slider를 조절할 때마다 Label Text의 값을 변경해 보도록 하겠습니다.

Slider의 값의 범위는 0 ~ 50 까지로 설정해 놓았습니다.

각 Slider의 valueChanged(int) signal과 slot_x_changed(), slot_y_changed() slot을 연동합니다.

valueChanged signal은 slider의 값이 변경될 때마다 이벤트가 발생됩니다.

2. 파이썬 코드로 slot 구현하기

각 slot 함수의 전달인자로 slider값인 data를 전달 받습니다. 

data를 label의 setText 함수로 값을 표시하도록 합니다. 

data는 정수이기 때문에 string으로 변경하여 전달인자로 넣어줍니다.

    def slot_x_changed(self, data):
        self.ui.label_x_value.setText(str(data))
    def slot_y_changed(self, data):
        self.ui.label_y_value.setText(str(data))

3. 전체 코드

import sys
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QFileDialog
from PyQt5 import uic

class MyApp(QtWidgets.QDialog):
    def __init__(self, parent = None):
        super().__init__(parent)
        self.ui = uic.loadUi("./file/myapp.ui", self)
        self.ui.show()
    def slot_x_changed(self, data):
        self.ui.label_x_value.setText(str(data))
    def slot_y_changed(self, data):
        self.ui.label_y_value.setText(str(data))

app = QtWidgets.QApplication(sys.argv)
me = MyApp()
sys.exit(app.exec())
반응형
반응형

파이썬 GUI PyQt5(3) - QFileDialog를 이용하여 파일 선택 및 열기

 

1. Qt Designer로 Push button / Lable / Text Edit 생성하기

Qt Designer 사용법은 아래 링크를 참조합니다.

https://zidarn87.tistory.com/256?category=415247 

 

파이썬 GUI PyQt5(1) - QtDesigner를 이용한 간단한 창 띄워보기

파이썬 GUI PyQt5(1) - QtDesigner를 이용한 창 띄우기 1. PyQt5를 사용하기 위한 준비하기 - Python 개발 IDE인 PyCharm 설치하기 (다운로드 PyCharm: JetBrains가 만든 전문 개발자용 Python IDE) - Qt Designer..

zidarn87.tistory.com

우선 Push Button / Label / TextEdit 컴포넌트를 생성합니다. 

Object Name은 각각 pushButton_open / label_filename / textEdit_content로 지정하였습니다.

open 버튼에 clicke csiganl / slot_fileopen() slot을 연동합니다. 

2. 파이썬 코드에서 QFileDialog 생성

slot_fileopen 함수에 file name을 가지고 오기 위해 QFileDialog.getOpenFileName 함수를 호출합니다. 

아래 함수를 호출하게 되면 File Dialog가 출력됩니다. 

파일을 선택하면 tuple 형이 반환되며, tuple의 첫번째는 파일 이름이 출력됩니다. 

====> <class 'tuple'> ('E:/pythonProject1/first.py', 'All Files (*)')

 

파일의 이름은 lable_filename에 set하고, 파일 이름을 가지고 데이터를 읽은 후에 데이터를 textEdit_content에 set하도록 구현하였습니다.

    def slot_fileopen(self):
        fname = QFileDialog.getOpenFileName(self, 'Open file', './')
        print(type(fname) , fname)
        self.ui.label_filename.setText(fname[0])

        if fname[0]:
            f = open(fname[0], 'r')
            with f:
                data = f.read()
                self.textEdit_content.setText(data)

 

Open 버튼을 클릭하면, 아래와 같이 File Dialog가 생성됩니다.

파일을 선택하면, 파일의 데이터의 내용을 출력합니다.

3. 전체 코드

import sys
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QFileDialog
from PyQt5 import uic

class MyApp(QtWidgets.QDialog):
    def __init__(self, parent = None):
        super().__init__(parent)
        self.ui = uic.loadUi("./file/myapp.ui", self)
        self.ui.show()
    def slot_fileopen(self):
        fname = QFileDialog.getOpenFileName(self, 'Open file', './')
        print(type(fname) , fname)
        self.ui.label_filename.setText(fname[0])

        if fname[0]:
            f = open(fname[0], 'r')
            with f:
                data = f.read()
                self.textEdit_content.setText(data)


app = QtWidgets.QApplication(sys.argv)
me = MyApp()
sys.exit(app.exec())
반응형
반응형

파이썬 GUI PyQt5(2) - QtDesigner Push button 이벤트 signal/slot 연동

 

1. QtDesigner로 창 띄우는 방법

https://zidarn87.tistory.com/256?category=415247 

 

파이썬 GUI PyQt5(1) - QtDesigner를 이용한 간단한 창 띄워보기

파이썬 GUI PyQt5(1) - QtDesigner를 이용한 창 띄우기 1. PyQt5를 사용하기 위한 준비하기 - Python 개발 IDE인 PyCharm 설치하기 (다운로드 PyCharm: JetBrains가 만든 전문 개발자용 Python IDE) - Qt Designer..

zidarn87.tistory.com

 

2. QtDeigner에서 ui 버튼 생성 및 signal / slot 연동

왼쪽 위젯박스에서 Push Button과 Label 컴포넌트를 왼쪽의 My First Application 창에 드래그해서 생성합니다.

Label과 Push button 속성 중 Object 이름과 text를 지정해봅니다. 

Object 이름은 파이썬 코드에서 해당 컴포넌트를 참조하여, 설정 및 동작을 하기 위해 사용됩니다. 

start 버튼을 눌렀을 때, Label의 text를 start로 변경하고, stop 버튼을 눌렀을 때에는 Label의 text를 stop으로 변경해 보도록 하겠습니다.

이제는 signal/slot를 지정해 봅니다. 

Edit siglal/slot 모드로 변경합니다. 

그리고 start 이름을 가진 push button을 클릭하고 아래로 드래그 하여, Confiture Connection 창의 띄웁니다.

Edit 버튼을 눌러 Slot을 만들어 줍니다.

이제 signal과 slot을 연결해줍니다. 

왼쪽은 이벤트가 발생할 때의 signal로 보시면 되고, 오른쪽은 slot입니다. 

버튼을 클릭했을 때의 동작되도록 하기 위해, clicked() 시그널과 start() 슬롯을 연결해줍니다. 

이제 파이썬 코드에서 start() slot에 대한 함수를 만들어, 어떠한 동작을 실행시킬지를 정의해주면 됩니다. 

start 버튼과 stop 버튼의 이벤트에 대한 slot을 연결하였습니다. 

이제 파일을 저장하고, 파이썬 코드를 작성하겠습니다.

s

3. 파이썬 코드로 slot에 대한 함수 생성 및 정의

위에서 만든 ui 파일을 로그하고, Qt Designer에서 만든 slot을 정의하지 않고 파이썬 코드를 실행하면 아래와 같은 에러가 발생합니다. 

하여, start slot 함수와 stop slot 함수를 생성해보도록 하겠습니다. 

아래 코드에서 uic.loadUi("./file/myapp.ui") 코드를 uic.loadUi("./file/myapp.ui", self) 로 변경해주어야 slot 함수를 제대로 인식하여 에러가 발생되지 않습니다. 

slot 함수를 생성하고, 정의하였습니다. 

 start 버튼을 누르면 start() 함수가 호출되고, stop 버튼을 누르면 stop() 함수가 호출됩니다. 

호출 되었을 때, label_status를 참조하여, Label 컴포넌트의 text를 변경하도록 하였습니다. 

    def start(self):
        self.ui.label_status.setText("start")
    def stop(self):
        self.ui.label_status.setText("stop")

실행해보면 아래와 같이 출력됩니다. 

4. 전체 코드

import sys
from PyQt5 import QtWidgets
from PyQt5 import uic

class MyApp(QtWidgets.QDialog):
    def __init__(self, parent = None):
        super().__init__(parent)
        self.ui = uic.loadUi("./file/myapp.ui", self) # 두번째 전달인자에 self를 넣어주어야 합니다.
        self.ui.show()
    def start(self):
        self.ui.label_status.setText("start")
    def stop(self):
        self.ui.label_status.setText("stop")

app = QtWidgets.QApplication(sys.argv)
me = MyApp()
sys.exit(app.exec())

 

반응형

+ Recent posts