QWidget 의 메서드를 재정의하여 사용 -> 기존 메서드 교체 가능
QWidget 의 이벤트 함수를 사용 가능 -> 이벤트 발생시 호출되는 함수 재정의
class 내부에서 전역으로 변수를 사용을 위해 항상 self 를 붙여준다
만약 self 안붙이면 메서드 내에서만 쓸수있는 지역변수
from PySide6.QtWidgets import *
class MyApp(QWidget):
def __init__(self):
super().__init__()
self.main()
def main(self):
self.resize(400,400)
self.btn = QPushButton("HI",self)
self.btn.clicked.connect(self.go)
def go(self):
self.msg = QMessageBox()
self.msg.setText("Hello")
self.msg.exec()
def closeEvent(self,event): # 위젯 종료시 호출되는 함수로 함수명은 변경하면 안된다.
self.msg = QMessageBox()
self.msg.setText("BYE")
self.msg.exec()
app = QApplication()
win = MyApp() # QWidgets이 아닌 class로 지정해줌
win.show()
app.exec()
from PySide6.QtWidgets import *
class MyApp(QWidget):
def __init__(self):
super().__init__()
self.main()
def main(self):
lay = QVBoxLayout()
self.btn1 = QPushButton("1")
self.btn2 = QPushButton("2")
self.btn3 = QPushButton("3")
lay.addWidget(self.btn1)
lay.addWidget(self.btn2)
lay.addWidget(self.btn3)
self.setLayout(lay)
self.btn1.clicked.connect(self.one)
self.btn2.clicked.connect(self.two)
self.btn3.clicked.connect(self.three)
def showMsg(self,str):
self.msg = QMessageBox()
self.msg.setText(str)
self.msg.exec()
def closeEvent(self,event): # 위젯 종료시 호출되는 함수로 함수명은 변경하면 안된다.
self.showMsg("BYE")
def one(self):
self.showMsg("1")
def two(self):
self.showMsg("2")
def three(self):
self.showMsg("3")
app = QApplication()
win = MyApp() # QWidgets이 아닌 class로 지정해줌
win.show()
app.exec()
from PySide6.QtWidgets import *
from PySide6.QtGui import *
app = QApplication()
app.setApplicationName("메모장")
edit = QPlainTextEdit() # 메모장 생성
class MainWindow(QMainWindow):
def closeEvent(self, event):
if not edit.document().isModified():
return
answer = QMessageBox.question(window, None, "Save or Not",
QMessageBox.Save |
QMessageBox.Discard |
QMessageBox.Cancel)
if answer & QMessageBox.Save:
save()
elif answer & QMessageBox.Cancel:
event.ignore()
window = MainWindow()
window.setCentralWidget(edit)
menu = window.menuBar().addMenu("&File") # $File = $는 맨 앞자를 따와 Alt + F를 단축키로 사용
open_action = QAction("&Open")
def open_file():
path = QFileDialog.getOpenFileName(window, "Open File")[0]
if path:
edit.setPlainText(open(path).read())
open_action.triggered.connect(open_file)
open_action.setShortcut(QKeySequence("Ctrl+O")) # 단축키 설정
menu.addAction(open_action)
file_path = None
save_action = QAction("&Save")
def save():
if file_path is None:
save_as()
else:
with open(file_path, "w") as f:
f.write(edit.toPlainText())
edit.document().setModified(False)
save_action.triggered.connect(save)
save_action.setShortcut(QKeySequence("Ctrl+S"))
menu.addAction(save_action)
save_as_action = QAction("Save &As...")
def save_as():
global file_path
path = QFileDialog.getSaveFileName(window, "Save As")[0]
if path:
file_path = path
save()
save_as_action.triggered.connect(save_as)
menu.addAction(save_as_action)
close = QAction("&Close")
close.triggered.connect(window.close)
menu.addAction(close)
help_menu = window.menuBar().addMenu("&Help")
about_action = QAction("&About")
help_menu.addAction(about_action)
def show_about_dialog():
text = "<center>" \
"<h1>Text Editor</h1>" \
"<\center>" \
"<p>Version 1.2.3.<br>"\
"Copyright MCD</p>"
QMessageBox.about(window, "About", text)
about_action.triggered.connect(show_about_dialog)
window.show()
edit.show()
app.exec()