반응형

파이썬 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())

 

반응형
반응형

파이썬 GUI PyQt5(1) - QtDesigner를 이용한 창 띄우기

 

1. PyQt5를 사용하기 위한 준비하기

- Python 개발 IDE인 PyCharm 설치하기 (다운로드 PyCharm: JetBrains가 만든 전문 개발자용 Python IDE)

- Qt Designer 설치하기 (Qt Designer Download for Windows and Mac (fman.io))
  (Qt Designer는 ui를 설치하

- pip install pyqt5 또는 PyCharm에서 pyqt5 설치하기 (File > Settings > Project > Python Interpreter > + )

2. QtDesigner 없이 창 띄워보기

QWidget 클래스를 상속한 클래스를 만들어, 창에 대한 설정을 하고,  show 함수로 창을 띄웁니다. 

import sys
from PyQt5.QtWidgets import QApplication, QWidget

class MyApp(QWidget):
    def __init__(self):  #클래스 인스턴스 생성시 자동적으로 호출됩니다.
        super().__init__()
        self.initUI()
    def initUI(self): # 창을 설정하는 함수를 만듭니다. 
        self.setWindowTitle('My First Application') # 창의 이름을 지정합니다.
        self.move(300, 300) # 창이 만들어질 위치를 지정합니다. 
        self.resize(400, 200) # 창의 크기를 설정합니다. 
        self.show() # 창을 보여주도록 합니다. 

if __name__ == '__main__':
   app = QApplication(sys.argv)
   ex = MyApp()
   sys.exit(app.exec_())

3. Qt Designer로 ui 파일을 만들고, ui 파일 로드하여 창 띄우기 

설치된 Qt Designer를 실행하여, 버튼 없는 대화창을 만들어 보겠습니다. 

[File] > [New]를 통해 ui 파일을 만들어 줍니다. 

오른쪽 속성창에서 windowTitle 속성을 찾아, 창의 이름을 만들어 봅니다. 

저장을 하고, 파일을 python project가 위치해있는 폴더에 이동시켜 줍니다. 

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") # Qt Designer로 만든 파일을 로드합니다.
        self.ui.show() # 만든 ui를 보여주도록 합니다.

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

 

다음에는 버튼을 만들어 버튼 click에 대하여 signal / slot으로 동작하도록 해봅니다.

반응형

+ Recent posts