728x90

코딩/pyqt, pyside 7

[pyside6] 창 타이틀바에서 닫기 버튼, 최소화 버튼, 최대화 버튼 등을 비활성화 되게 하려면?

pyside 또는 pyqt로 응용 프로그램을 만들다보면 윈도우 타이틀바에서 닫기 버튼, 최소화 버튼, 최대화 버튼 등을 비활성화시키고 싶은 경우가 있습니다. 참고로 응용 프로그램에서 이런 걸 윈도우(창) 타이틀바라고 부릅니다. 타이틀 바에는 일반적으로 프로그램의 아이콘, 이름, 최소화버튼, 최대화버튼, 닫기버튼 등이 포함되어 있습니다. 닫기 버튼 비활성화 닫기 버튼을 비활성화시키고 싶다면 다음 코드 한 줄을 적절한 위치에 삽입해주면 됩니다. self.setWindowFlags(Qt.WindowTitleHint | Qt.WindowMinimizeButtonHint | Qt.WindowMaximizeButtonHint) 저는 해당 클래스의 __init__ 함수 내에 삽입해줬습니다. 실행해봤더니 다음과 같이 ..

코딩/pyqt, pyside 2022.06.07

[pyqt5] 야구 중계에 스트라이크 존이 제공되지 않을 때 시청자를 위한 가이드 앱

야구 중계를 보면 보통 시청자들에게 스트라이크 존에 대한 정보를 주기 위해 사각형 가이드가 함께 송출됩니다. 그런데 간혹 어떤 중계에서는 그러한 가이드가 없는 경우가 있습니다. 이런 경우에는 시청의 재미가 반갑됩니다. 저는 이런 경우를 위해서 pyqt를 이용하여 간단한 프로그램을 만들어봤습니다(예전에 심심풀이로 만들어봤는데, 이제야 공유해봅니다). 우선 설치 필요한 패키지는 pyqt5와 pyinstaller입니다. pip install pyqt5 pip install pyinstaller 파이썬 소스코드는 다음과 같습니다. import sys from PyQt5.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QWidget, QSlider, QDial..

코딩/pyqt, pyside 2022.03.16 (2)

[pyside6] QLabel에 이미지 넣을 때 종횡비(aspect ratio) 설정

pyqt, pyside 앱에 이미지를 넣고 싶을 때는 QLabel 위젯을 활용할 수 있다. 이때 이미지를 넣을 때 이미지의 크기를 원래 크기와 다르게 해주려면 QPixmap 클래스의 scaled 메소드를 활용해야 한다. 이미지의 크기를 지정해줄 때는 이미지의 종횡비(aspect ratio)를 어떻게 설정할 것인가를 고려해야 한다. 종횡비는 이미지의 가로세로 비율이라고 생각하면 된다. 이미지의 경우 대체로 종횡비를 유지하는 것이 실제 비율을 해치지 않기 때문에 좋다. QLabel 이미지 종횡비 설정법 만약 원래 이미지의 종횡비를 무시하고 지정하는 크기에 맞출 것이면 aspectMode를 Qt.IgnoreAspectRatio로 해주면 된다. 종횡비를 유지할 것이면 Qt.KeepAspectRatio로 설정하면..

코딩/pyqt, pyside 2022.02.27 (2)

[pyside6] 위젯 내 글자 크기를 변경하고 싶을 때

pyside 또는 pyqt에서 위젯이라는 것은 UI를 구성하는 하나하나의 요소를 뜻한다. 버튼, 라벨, 체크박스 등등이 모두 위젯이다. 오늘은 이러한 위젯 내 글자 크기를 변경하는 방법에 대해 알아보자. 어렵지 않으니 바로 코드를 살펴보자. from PySide6.QtWidgets import QApplication, QMainWindow, QLabel, QPushButton, QVBoxLayout, QWidget import sys class MainWindow(QMainWindow): def __init__(self): super().__init__() widget1 = QLabel("hello world") widget2 = QLabel("hello world") font = widget2.font..

코딩/pyqt, pyside 2022.02.26

[pyside6] QThreadPool을 이용해서 몇 개의 스레드가 활성화되어 있는지 확인하기

pyside 앱에서 여러 개의 스레드를 사용하다보면 도대체 현재 몇 개의 스레드가 활성화되어 있는지 궁금할 때가 있다. QThreadPool을 활용하면 활성화되어 있는 스레드의 개수를 파악할 수 있다. QThreadPool은 스레드를 사용하는 프로그램에서 스레드 생성 비용을 줄이기 위해 개별 QThread 객체를 관리하고 재활용하기 위해 사용된다 [1]. 예제를 위해 간단한 프로그램을 만들었다. 하나의 버튼이 있는 프로그램인데, 버튼을 클릭하면 하나의 스레드가 생성되면서 현재 활성화되어 있는 스레드의 개수를 알려준다. 참고로 time.sleep(5)를 줬기 때문에 각 스레드는 5초 후에 소멸된다. from PySide6.QtWidgets import QApplication, QPushButton, QHB..

코딩/pyqt, pyside 2022.02.25

[PySide6] DeprecationWarning: Fuction: 'globalPos() const' is marked as deprecated 경고 메시지 출력 안되게 하기

pyqt나 pyside로 데스크탑 응용 프로그램을 만들 때 타이틀바를 없앤 형태로 프로그램을 만드는 경우가 있습니다. 이러한 프로그램들은 타이틀바가 없기 때문에 모니터 화면 상에서 이동시키기 위해서 별도의 처리를 해줘야 합니다. class MainWindow(QMainWindow)와 같은 클래스 내에 다음과 같은 함수들을 추가해주면 됩니다. def mousePressEvent(self, event): self.oldPos = event.globalPos() def mouseMoveEvent(self, event): delta = QPoint(event.globalPos() - self.oldPos) self.move(self.x() + delta.x(), self.y() + delta.y()) self...

코딩/pyqt, pyside 2021.11.29

[pyqt5] 프로그램창을 항상 가장 위에 있게 하면서 동시에 타이틀 바도 없게 하려면?

python, pyqt5로 만든 프로그램창을 항상 맨 위에 있게 하려면 setWindowFlags(Qt.WindowStaysOnTopHint)를 추가해줘야합니다. 타이틀 바를 없애려면 setWindowFlags(Qt.FramelessWindowHint)를 추가해줘야 합니다. 그러면 우리는 프로그램창을 항상 맨 위에 있게 하면서 타이틀 바도 없애려면 둘 다 추가해주면 된다고 생각합니다. setWindowFlags(Qt.WindowStaysOnTopHint) setWindowFlags(Qt.FramelessWindowHint) 그러나 이렇게 해주면 두번째 것만 적용이 됩니다. 둘 다 적용이 되게 하려면 or, 즉 | 를 사용해서 함께 넣어줘야 합니다. 다음과 같이 말이죠. setWindowFlags(Qt.W..

코딩/pyqt, pyside 2021.06.09 (2)