컴퓨터/Python

pyside6-uic mainwindow.ui -o mainwindow.py

풍경소리^^ 2022. 4. 21. 15:09

https://martinii.fun/153

 

1. PySide6의 Signal과 Slot에 관하여

시그널과 슬롯 짐작컨대 이 몇 개 안 되는 튜토리얼 시리즈를 따라오시면서, 여러분이 가장 많이 하셨던 생각 중 하나는, "그래서 이 버튼이 뭔가 액션을 하게 하려면 어떻게 해야 하나?" 일 거라

martinii.fun

 

함수형--------------------

from PySide6.QtWidgets import QApplication, QMainWindow, QPushButton
def button_is_clicked():
    print("클릭 되었습니다!!!")
app = QApplication()
window = QMainWindow()
button = QPushButton("버튼")
button.clicked.connect(button_is_clicked)
window.setCentralWidget(button)
window.show()
app.exec_()

class형--------------------

from PySide6.QtWidgets import QApplication, QMainWindow, QPushButton
class MainWindow(QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        button = QPushButton("버튼")
        button.clicked.connect(self.button_is_clicked)
        self.setCentralWidget(button)
    def button_is_clicked(self):
        print("클릭 되었습니다!!!")
app = QApplication()
window = MainWindow()
window.show()
app.exec_()

함수형--------------------clicked released

from PySide6.QtWidgets import QApplication, QMainWindow, QPushButton
def button_is_pressed():
    print("Pressed!!!")
def button_is_released():
    print("Released!!!")
app = QApplication()
window = QMainWindow()
button = QPushButton("버튼")
button.pressed.connect(button_is_pressed)
button.released.connect(button_is_released)
window.setCentralWidget(button)
window.show()
app.exec_()

class형--------------------clicked released

from PySide6.QtWidgets import QApplication, QMainWindow, QPushButton
class MainWindow(QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        button = QPushButton("버튼")
        button.pressed.connect(self.button_is_pressed)
        button.released.connect(self.button_is_released)
        self.setCentralWidget(button)
    def button_is_pressed(self):
        print("Pressed!!!")
    def button_is_released(self):
        print("Released!!!")
app = QApplication()
window = MainWindow()
window.show()
app.exec_()

 

https://martinii.fun/154

 

1. 시그널-슬롯 응용예제(버튼에 클릭횟수 표시)와 클래스 기본개념

지난 포스팅에서는 Signal&Slot의 기본 개념을 짧은 설명과 최소한의 코드를 통해 가볍게 설명을 드렸습니다. 지난 포스팅 마지막에, 시그널을 통해 변수의 값을 바꾼다든지, 인터페이스를 변경하

martinii.fun

class형--------------------

from PySide6.QtWidgets import QApplication, QMainWindow, QPushButton
class MainWindow(QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.button = QPushButton()
        self.setCentralWidget(self.button)
        self.button.setCheckable(True)
        self.button.clicked.connect(self.button_clicked)
        self.click_count = 0
        self.button.setText("클릭하세요")
    def button_clicked(self):
        self.click_count += 1
        self.button.setText(f"{self.click_count}번 클릭함")
app = QApplication()
window = MainWindow()
window.show()
app.exec_()

함수형--------------------

from PySide6.QtCore import QSize
from PySide6.QtWidgets import QApplication, QMainWindow, QPushButton
def button_clicked():
    global click_count
    click_count+= 1
    button.setText(f"{click_count}번 클릭함")
click_count = 0
app = QApplication()
button = QPushButton()
button.setFixedSize(QSize(300, 200))
button.setText("클릭하세요")
button.clicked.connect(button_clicked)
button.show()
app.exec_()

class형--------------------

from PySide6.QtCore import QSize
from PySide6.QtWidgets import QApplication, QMainWindow, QPushButton
class MainWindow(QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.setWindowTitle("버튼 연습")
        button = QPushButton("클릭하세요", parent=self)
        button.setFixedSize(QSize(300, 200))
        self.setFixedSize(QSize(300, 200))
app = QApplication()
window = MainWindow()
window.show()
app.exec_()

class형--------------------

from PySide6.QtCore import QSize
from PySide6.QtWidgets import QApplication, QMainWindow, QPushButton
class MainWindow(QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.setWindowTitle("버튼 연습")
        self.button = QPushButton("클릭하세요", parent=self)
        self.setCentralWidget(self.button)
        self.button.setCheckable(True)
        self.button.clicked.connect(self.button_clicked)
        self.click_count = 0
        self.button.setFixedSize(QSize(300, 200))
        self.setFixedSize(QSize(300, 200))
    def button_clicked(self):
        self.click_count += 1
        self.button.setText(f"{self.click_count}번 클릭함")
app = QApplication()
window = MainWindow()
window.show()
app.exec_()

 

https://martinii.fun/155

 

0. PySide6의 시그널-슬롯 활용예제: 다른 위젯을 슬롯으로 연결하기

PySide 시그널-슬롯 활용예제2 QLineEdit의 textChanged 시그널을 QLabel.setText 슬롯과 연결하기 안녕하세요? 이번 포스팅을 시작하기 전에 지난 포스팅에서 작성했던 코드를 최대한 간단히 요약해서 다른

martinii.fun

class형--------------------

from PySide6.QtWidgets import QApplication, QMainWindow, QPushButton, \
    QLabel, QLineEdit, QWidget, QVBoxLayout
class MainWindow(QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.label = QLabel()
        self.input = QLineEdit()
        self.input.textChanged.connect(self.label.setText)
        layout = QVBoxLayout()
        layout.addWidget(self.input)
        layout.addWidget(self.label)
        container = QWidget()
        container.setLayout(layout)
        self.setCentralWidget(container)
        self.setFixedSize(200, 80)
app = QApplication()
window = MainWindow()
window.show()
app.exec_()

https://martinii.fun/156

 

1. PySide6의 QtDesigner를 사용해봅시다.

QtDesigner 실행해보기 pip를 통해 PySide6를 설치했다면, 파이썬폴더\Library\bin이나 파이썬폴더\Lib\site-packages\PySide6 폴더 안에 designer.exe(또는 pyside6-designer.exe)가 같이 설치되어 있습니다. 귀..

martinii.fun

파이썬폴더\Lib\site-packages\PySide6

designer.exe

"mainwindow.ui"

"객체 탐색기"

"레이아웃이 풀려있다"라는 의미

윈도우에서 외곽의 VBoxLayout 부분에 우클릭하고 제일 하단의 "배치" - "수직으로 배치"를 다시 선택하면 (혹은 단축키 Ctrl-2를 누르면) 금지표시가 사라집니다.

 

mainwindow.ui

프로젝트루트\venv\Scripts 폴더 안에 pyside6-uic.exe

 

pyside6-uic mainwindow.ui -o mainwindow.py

 

main.py--------------------

from PySide6.QtWidgets import QApplication, QMainWindow
from mainwindow import Ui_MainWindow
class MainWindow(QMainWindow, Ui_MainWindow):
    def __init__(self, *args, obj=None, **kwargs):
        super(MainWindow,self).__init__(*args, **kwargs)
        self.setupUi(self)
app = QApplication()
window = MainWindow()
window.show()
app.exec_()

https://martinii.fun/157

 

1. PySide6-QtDesigner, 윈도우메모장 클론코딩!!1/? + uic팁

지난 포스팅은... 1. PySide6의 QtDesigner를 사용해봅시다.(1/2) QtDesigner 실행해보기 pip를 통해 PySide6를 설치했다면, 파이썬폴더\Library\bin이나 파이썬폴더\Lib\site-packages\PySide6 폴더 안에 designe..

martinii.fun

파이참

Alt+F12

pyside6-designer

 

[팁1]커맨드프롬프트에서 uic를 쓰지 않고 파이썬 코드를 확인하는 방법!

Qt Designer - 폼 - Python 코드 보기

잡아주기

B:\python\pyside6\venv\Lib\site-packages\PySide6

uic.exe 복사해서

 

B:\python\pyside6\venv\Lib\site-packages\PySide6

bin 폴더 만들기

uic.exe 붙여넣기

 

Qt Designer - 폼 - Python 코드 보기

 

[팁2] ui파일을 .py로 변환하지 않고 바로 파이썬으로 불러오는 방법(PySide6)

notepad_mainwindow.ui

만들면

notepadloader.py--------------------

from PySide6.QtWidgets import QApplication
from PySide6.QtUiTools import QUiLoader
loader = QUiLoader()
app = QApplication()
window = loader.load("notepad_mainwindow.ui", parentWidget=None)
window.show()
app.exec_()

클래스를 상속받거나 재정의하는 방식을 사용할 수 없기 때문에 별도의 로직을 파이썬에서 추가하기가 어려워 보입니다.

https://martinii.fun/158

 

1. PySide6 메모장 만들기 - 위젯 추가하기

우린 지금 어디쯤? 지금 우리는 윈도우10의 기본프로그램 중 하나인 메모장을 PySide6로 클론코딩하는 작업을 진행하고 있습니다. 지난 포스팅에서는 메모장의 틀을 만들고, 메뉴바를 완성했습니

martinii.fun

파이참

Alt+F12

pyside6-designer

 

notepad_mainwindow.ui

 

디자이너 메뉴

폼 - Python코드 보기

모두 복사

 

notepad_mainwindow.py

붙여넣기

 

notepad_main.py--------------------

from PySide6.QtWidgets import QApplication, QMainWindow
from notepad_mainwindow import Ui_MainWindow
class MainWindow(QMainWindow, Ui_MainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.setupUi(self)
app = QApplication()
window = MainWindow()
window.show()
app.exec_()

Ctrl + Shift + F10

 

notepad_main.py--------------------수정

from PySide6.QtWidgets import QApplication, QMainWindow
from notepad_mainwindow import Ui_MainWindow
class MainWindow(QMainWindow, Ui_MainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.setupUi(self)
app = QApplication()
window = MainWindow()
window.show()
window1 = MainWindow()
window1.show()
app.exec_()

메인윈도우에서 파일(F)-새 창(W)를 선택한 후 objectName을 확인

action_W

new_window 수정

ui를 저장하고, 

 

디자이너 메뉴

폼 - Python코드 보기

모두 복사

 

notepad_mainwindow.py 에다 붙여넣은

notepad_main.py 파일을 열어서 코드를 아래처럼 수정합니다. MainWindow 클래스 정의 부분만 추가

notepad_main.py--------------------

from PySide6.QtWidgets import QApplication, QMainWindow
from notepad_mainwindow import Ui_MainWindow
class MainWindow(QMainWindow, Ui_MainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.setupUi(self)
        self.new_window.triggered.connect(self.add_window)
        self.windows = []
    def add_window(self):
        add_window = MainWindow()
        self.windows.append(add_window)
        add_window.show()
app = QApplication()
window = MainWindow()
window.show()
app.exec_()

https://martinii.fun/159

 

PySide6 메모장 만들기: 열기, 저장 및 끝내기 구현

지난 시간에는 지난 시간에는 QtDesigner 내에서 ①파이썬 코드를 생성한 후 복사해서 파이참에 붙여넣는 방식으로 ui변환을 생략하고 파일을 직접 업데이트하는 방법을 보여드렸습니다. ②또한 "

martinii.fun

pyside6-designer

 

메인윈도우에서 파일(F)-새 창(W)를 선택한 후 objectName을 확인

원상태로 수정 new_window → action_W

 

디자이너 메뉴

폼 - Python코드 보기

모두 복사

 

notepad_mainwindow.py 에다 붙여넣은

notepad_main.py--------------------

from PySide6.QtWidgets import QApplication, QMainWindow
from notepad_mainwindow import Ui_MainWindow
class MainWindow(QMainWindow, Ui_MainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.setupUi(self)
        self.action_W.triggered.connect(self.add_window)
        self.windows = []
    def add_window(self):
        add_window = MainWindow()
        self.windows.append(add_window)
        add_window.show()
app = QApplication()
window = MainWindow()
window.show()
app.exec_()

1. 파이썬의 open 함수

https://codechacha.com/ko/python-read-write-file/

 

Python - Text 파일 읽고 쓰는 방법 (read, write, append)

Text file을 읽고 쓰는 방법을 소개합니다. C, Java에서 파일을 읽고 쓰는 방법과 유사합니다. Access mode가 있어서 읽기 전용으로 파일을 사용할 것인지, 쓰기 전용으로 파일을 사용할 것인지 정할 수

codechacha.com

2. PySide6의 QFileDialog

프로젝트 창

Ctrl + Shift + Alt + Insert

python

scratch.py--------------------

from PySide6.QtWidgets import QApplication, QFileDialog
app = QApplication()
window = QFileDialog()
filename = window.getOpenFileName()
print(filename)
app.exec_()

 

3. Qt의 plainTextEdit (setPlainText 및 toPlainText)

action_X 의 triggered 시그널에 MainWindow의 close()

+키를 누르고,

 

송신자에 action_X,

시그널에 triggered,

수신자에 MainWindow

슬롯에 close()

미리보기(Ctrl-R)

 

https://martinii.fun/174

 

[PySide6]Qt 기본 중의 기본 위젯, QLabel 사용방법

천리길도 한걸음부터 저도 Qt를 공부하면서 무료하거나 지루함이 찾아올 때면 구글 검색창에 "The best qt design examples" 같은 문구로 검색을 하고 저런 프로그램 이미지들을 구경하곤 합니다. 기초

martinii.fun

qlabelpicture.py--------------------

from PySide6.QtGui import QPixmap
from PySide6.QtWidgets import QApplication, QMainWindow, QLabel
class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("회사원코딩 증명사진")
        widget = QLabel(text="Hello")
        widget.setPixmap(QPixmap(r"C:\Users\newstep\Pictures\back.png"))
        widget.setScaledContents(True)
        self.setCentralWidget(widget)
if __name__ == '__main__':
    app = QApplication()
    window = MainWindow()
    window.show()
    app.exec()

https://martinii.fun/175

 

[PySide6]QLabel 사용방법 2/3

지난 시간에 이어, QLabel 관련한 내용을 이어서 설명드리겠습니다. 복습 겸 지난 포스팅을 읽고 오시거나, 아래의 전체코드라도 한 번은 정독하고 포스팅을 읽어주셨으면 합니다. import sys from PySi

martinii.fun

qlabelpicturemousepressevent.py--------------------

from PySide6.QtGui import QPixmap
from PySide6.QtWidgets import QApplication, QMainWindow, QLabel
class MainWindow(QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        # self.setWindowTitle("회사원코딩 증명사진")
        self.widget = QLabel()
        self.widget.setPixmap(QPixmap(r"C:\Users\newstep\Pictures\back.png"))
        self.widget.setScaledContents(True)
        self.setCentralWidget(self.widget)
        self.origin_photo = True
        self.widget.mousePressEvent = self.photo_toggle
    def photo_toggle(self, event):
        if self.origin_photo:
            self.widget.setPixmap(QPixmap(r"C:\Users\newstep\Pictures\background.png"))
            self.origin_photo = False
        else:
            self.widget.setPixmap(QPixmap(r"C:\Users\newstep\Pictures\back.png"))
            self.origin_photo = True
if __name__ == '__main__':
    app = QApplication()
    window = MainWindow()
    window.show()
    app.exec()