pyqt5 도서관리프로그램 GUI 제작

Lala·2022년 8월 20일
0

뚝딱이의 IT공부

목록 보기
2/3
post-thumbnail

❤️ 도서관리프로그램 GUI구성하기

tkinter

tkinter로 예전에 gui를 구성했을 때 모습이다. 엄청나게 디자인이 구려서 조금 이쁘게 정리하고 싶었다.
tkinter를 이용해서 디자인을 미세하게 조정해 꾸미는 것이 어렵기 때문에 그나마 미세하게 디자인 할 수 있도록 pyqt를 이용해 제작했담
메인창, 등록창,도서를 조회할 수 있는 조회창으로 나눠 진행했다.

 

  1. 메인창

메인창에서는 각각 입력창과 등록창으로 가는 Pushbutton 2개와
사람을 인식해 트래킹하는데 이것을 멈추고 실행시킬 수 있도록 on / off 버튼을 만들어주었다.



  2. 입력창

입력창에서는 책을 바코드에 찍어서 정확한 책장의 위치가 나타날 수 있도록 구성해보았다.



  3. 등록창

등록창에서는 책을 등록하고 삭제할 수 있도록 구성했다.




💚 qt 디자이너와 코드

ui를 구성하는 방법은 디자이너를 이용하는 방법과 코드를 입력하는 방법으로 나눠져있다.

디자이너를 이용해서 하는건 한계가 있다고 생각해서 디자이너로 간단하게 만들고
코드를 이용해서 제작했다.

우선 QT디자이너에 대해 설명하겠당


1. QT Designer

  1) 실행시

  • 실행을 하게 되면 위와 같이 폼을 선택하라는 메세지가 뜨면서 디자이너가 열린다.
  • 나는 main window를 생성했다


  2) 위젯 상자

  • 위젯 상자에서는 폼안에 넣을 윚-엣들이 있다.
  • 버튼이나 line edit등을 선택해서 gui를 꾸밀 수 있다


  3) 상단 메뉴??

  • 처음부터 새폼만들기, 열기, 저장하기, 뒤로보내기, 앞으로 보내기, 위젯 편집, 시그널 / 슬롯 편집기, 친구 편집, 탭 순서 편집기 등으로 뒷부분은 대강 정렬크기 조정에 관한 부분이다.


  4) 오른쪽 편집기들

  • 위에서부터 설명
  • 객체 탐색기는 상위위젯 하위위젯을 확인할 수 있는 부분
  • 속성 편집기는 버튼이나 배경이나 폰트등의 속성을 편집할 수 있는 부분이다
  • 시그널 / 슬롯 편집기 는 송신자 수신자 시그널 그리고 슬롯을 수정하거나 추가할 수 있는 부분이다
  • 리소스탐색기는 사진과 같은 데이터를 리소스안에 넣어 pyqt에서 사용할 수 있게 해준다



2. 제작

 

  1) 사진 넣기

  ㅇ label을 이용해서 사진넣기

  • 라벨 넣어주고 크기를 조정해준다. 마우스로도 조정가능하지만 속성편집기에서 미세하게 조정가능하다.



  • 리소스편집기에 들어가면 흰종이[새 리소스파일]을 선택해 리소스 파일을 만들어준다
  • 후에 생성된 리소스파일을 선택해주고 오른쪽에 접두사 추가를 눌러 사진을 리소스파일 안에 넣어준다.



  • 속성편집기에서 stylesheet를 검색해 스타일시트 편집기를 열어 리소스추가>image를 눌러
    리소스 파일안에 있는 사진을 선택해주면



  • 완성⭐


  2) 트래킹 온 & 오프

  • 버튼을 누르면 on off 디자인과 함께 변경
  • 아이콘을 이용해서 진행


      - qt디자이너 이용해서

  • 트래킹 off 사진과 트래킹 on 사진을 리소스 파일에다 저장해준다



  • 속성편집기에서 icon을 작성하여 기본, 일반꺼짐, 사용불가능 꺼짐, 활성꺼짐 선택꺼짐에서는 리소스안 트래킹 off사진
  • 일반켜짐, 사용 불가능 켜짐, 활성켜짐, 선택 켜짐에서는 트래킹 on 사진으로 설정을 해주면 된다.

      - 코드이용해서

icon1 = QtGui.QIcon()
        icon1.addPixmap(QtGui.QPixmap(":/main_picture/트래킹 OFF.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        icon1.addPixmap(QtGui.QPixmap(":/main_picture/트래킹 ON.png"), QtGui.QIcon.Normal, QtGui.QIcon.On)
        icon1.addPixmap(QtGui.QPixmap(":/main_picture/트래킹 OFF.png"), QtGui.QIcon.Disabled, QtGui.QIcon.Off)
        icon1.addPixmap(QtGui.QPixmap(":/main_picture/트래킹 ON.png"), QtGui.QIcon.Disabled, QtGui.QIcon.On)
        icon1.addPixmap(QtGui.QPixmap(":/main_picture/트래킹 OFF.png"), QtGui.QIcon.Active, QtGui.QIcon.Off)
        icon1.addPixmap(QtGui.QPixmap(":/main_picture/트래킹 ON.png"), QtGui.QIcon.Active, QtGui.QIcon.On)
        icon1.addPixmap(QtGui.QPixmap(":/main_picture/트래킹 OFF.png"), QtGui.QIcon.Selected, QtGui.QIcon.Off)
        icon1.addPixmap(QtGui.QPixmap(":/main_picture/트래킹 ON.png"), QtGui.QIcon.Selected, QtGui.QIcon.On)
        self.Tracking_pushButton.setIcon(icon1)
        self.Tracking_pushButton.setIconSize(QtCore.QSize(181, 60))
        self.Tracking_pushButton.setCheckable(True)
        self.Tracking_pushButton.setObjectName("Tracking_pushButton")


3) 레이어 위치



  • 창 3개 만들어서 연결하기

  • 맨 처음에는메인창, 입력창, 등록창으로 각각 3개의 ui파일을 만들어서 연결했지만. 각각 만든 창을 연결한 것이기에 화면전환시 새로운 창이 열리면서 전환되는 문제가 있었다. 음... 사실 문제가 되진 않지만 우리는 하나의 윈도우에서 화면전환이 되는 것을 원해 위와 같은 방법은 포기했다...


  • stacked widget 이용하기


  • 위의 사진을 보면서 설명.
  • 인터넷을 찾아보니깐stacked widget을 이용해 제작하신 분이 있었다.
  • 예를 들어 설명하면 메인창을 stacked widget 첫번째 위젯에 구성하고, 오른쪽 상단의 삼각형을 눌러 2번째 위젯으로 넘어가 입력창....또 다음 3번째 위젯등록창을 구성해 사용하는 방법이다.



  • 와.... 이거면 하나의 창에서 화면전환이 가능하지 않을까 했지만, stacked widget은 그 위젯안에 구성한 버튼을 눌러서 화면전환을 하는게 아니라
  • stacked widget 밖.   즉, mainwindow에 있는 pushbutton을 눌러 화면전환하는 것이였다.
  • 그래서 포기했다..


  • 위젯 겹쳐서 사용하기

  • 위젯 크기는 800X480.
  • mainwindow를 하나 생성한 뒤에 기본이 되는 메인창을 맨밑에 배치해준다.
  • 그다음에는 위젯상자에서 입력창 구성할 widget을 메인창 ui위에 올려준다.
  • 후에 등록창 을 구성할 widget2를 widget위에 올려준다.



  • 결론 : 메인창<입력창(widget)<등록창(widget2)순으로 쌓아올려줬다.
  • 만약 메인창이 맨위에 위치하게 되면 버튼을 눌러도 메인창 아래에서 입력창과 등록창이 열리기 때문에 창이 보이지 않는다.
    따라서메인창이 맨아래에 위치해야하는 이유는 버튼을 눌렀을때 입력창과 등록창이 보일 수 있기 하기 위해서이다.



❗3번째 방법 tip

  • 실행하면 메인창이 뜨도록 입력창과 등록창을 hide 시켜준다.
self.widget.setHidden(True) #  입력창 hide
self.widget_2.setHidden(True) # 등록창 hide




4) 배경색 지정

  • 겹겹이 쌓아 올렸기 때문에 배경을 지정해주지 않으면 위 사진과 위젯 구분이 되지 않는다.
  • 사진넣는 것과 같이 label -> styleseet -> 색추가 -> color 순으로 색을 넣어준다. 담당하는 위젯의 맨아래에 깔아주면 된다.




5) 시그널 /슬롯 편집기

qt designer 이용시

  • 입력 버튼을 눌러 입력창이 떠야하므로
    시그널 슬롯 편집기를 실행시킨 뒤 입력버튼을 누르고 widget에 드래그 시키면



  • 위와같이 연결 설정을 할 수 있는 부분이 뜨고 cliked() -> show()를 선택해 연결시켜주면 된다.
  • 연결한 시그널과 슬롯은 오른쪽 하단 시그널 슬롯 부분에서도 수정가능하다.


코드 이용시

# 입력창에서 뒤로가기 버튼을 클릭하면 HIDE
self.back_pushButton_1.clicked.connect(self.widget.hide) # type: ignore
# 등록창에서 뒤로가기 버튼을 클릭하면 HIE
self.back_pushButton_2.clicked.connect(self.widget_2.hide) # type: ignore
메인창에서 입력 버튼을 클릭하면 입력창 SHOW
self.input_pushButton.clicked.connect(self.widget.show) # type: ignore
# 메인창에서 등록/삭제 버튼을 클릭하면 등록창 SHOW        
self.register_pushButton.clicked.connect(self.widget_2.show) # type: ignore




6) 탭 순서 정렬

업로드중..

  • 위의 탭 순서 편집를 누른 뒤



    업로드중..
  • 위의 사진처럼 숫자를 눌러서 탭순서를 지정해주면 된다.




7) qt디자인에서 만든 작업물 vscode에서 실행하기

cd 경로지정
# ui파일 -> 파이썬 파일로
pyuic5 -x 저장한 파일 이름.ui -o 저장할 파일 이름.py
# 리소스 파일 -> 파이썬 파일로
pyrcc5 저장한 파일.qrc -d 저장할 파일.py
  • ui파일 변환한 파이썬 파일을 실행하면 된다.


❗오류

ModuleNotFoundError: No module named 'resources_rc'
  • 간혹 위와 같이 오류가 뜰 수 있는데 이는 코드에 import된 리소스파일이 제대로 지정이 안되있기 때문이다.
    아래와 같이 수정해주면 해결 완료
import 리소스파일






💛 영상

https://youtu.be/2htepdd4AKk






💙 전체코드

import resource
from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        
        # 메인 오브젝트 네임 
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 480)  # 실행시 위젯 사이즈
        MainWindow.setContextMenuPolicy(QtCore.Qt.NoContextMenu)
        
        # 어플리케이션 아이콘
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap(":/icon/icon.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) 
        MainWindow.setWindowIcon(icon)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        
        
        
        
        # 메인창
        self.centralwidget.setObjectName("centralwidget")
        
        # 입력창으로 연결되는 버튼
        self.input_pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.input_pushButton.setGeometry(QtCore.QRect(310, 180, 180, 60))
        font = QtGui.QFont()
        font.setFamily("여기어때 잘난체 OTF")
        font.setPointSize(14)
        font.setBold(True)
        font.setWeight(75)
        self.input_pushButton.setFont(font)
        self.input_pushButton.setObjectName("input_pushButton")
        
        # 트래킹 on /off버튼
        self.Tracking_pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.Tracking_pushButton.setGeometry(QtCore.QRect(310, 350, 180, 60))
        font = QtGui.QFont()
        font.setFamily("여기어때 잘난체 OTF")
        font.setPointSize(14)
        font.setBold(True)
        font.setWeight(75)
        self.Tracking_pushButton.setFont(font)
        self.Tracking_pushButton.setStyleSheet("")
        self.Tracking_pushButton.setText("")
        
        # 트래킹 on /off 변경할 때 디자인이 다르게 변경되야되는데 
        # 아이콘설정부분에서 일반꺼짐일 때 일반  켜짐일때 사용 불가능 꺼짐 사용 불가는 켜짐일때 등으로 나눠서
        # 디자인 바뀔 수 있게 설정하는 부분이 있더라고 이거 이용하면 된다길래
        icon1 = QtGui.QIcon()
        icon1.addPixmap(QtGui.QPixmap(":/main_picture/트래킹 OFF.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        icon1.addPixmap(QtGui.QPixmap(":/main_picture/트래킹 ON.png"), QtGui.QIcon.Normal, QtGui.QIcon.On)
        icon1.addPixmap(QtGui.QPixmap(":/main_picture/트래킹 OFF.png"), QtGui.QIcon.Disabled, QtGui.QIcon.Off)
        icon1.addPixmap(QtGui.QPixmap(":/main_picture/트래킹 ON.png"), QtGui.QIcon.Disabled, QtGui.QIcon.On)
        icon1.addPixmap(QtGui.QPixmap(":/main_picture/트래킹 OFF.png"), QtGui.QIcon.Active, QtGui.QIcon.Off)
        icon1.addPixmap(QtGui.QPixmap(":/main_picture/트래킹 ON.png"), QtGui.QIcon.Active, QtGui.QIcon.On)
        icon1.addPixmap(QtGui.QPixmap(":/main_picture/트래킹 OFF.png"), QtGui.QIcon.Selected, QtGui.QIcon.Off)
        icon1.addPixmap(QtGui.QPixmap(":/main_picture/트래킹 ON.png"), QtGui.QIcon.Selected, QtGui.QIcon.On)
        self.Tracking_pushButton.setIcon(icon1)
        self.Tracking_pushButton.setIconSize(QtCore.QSize(181, 60))
        self.Tracking_pushButton.setCheckable(True)
        self.Tracking_pushButton.setObjectName("Tracking_pushButton")
        
        # 메인의 고북이 폰트 라벨
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(0, 60, 800, 77))
        font = QtGui.QFont()
        font.setFamily("여기어때 잘난체 OTF")
        font.setPointSize(48)
        font.setBold(True)
        font.setWeight(75)
        self.label.setFont(font)
        self.label.setAlignment(QtCore.Qt.AlignCenter)
        self.label.setObjectName("label")
        
        # 책장 사진
        self.menu_picture1 = QtWidgets.QLabel(self.centralwidget)
        self.menu_picture1.setGeometry(QtCore.QRect(60, 150, 171, 261))
        self.menu_picture1.setStyleSheet("image: url(:/main_picture/menu.png);")
        self.menu_picture1.setText("")
        self.menu_picture1.setObjectName("menu_picture1")
        
        # 고북이 사진
        self.menu_picture2 = QtWidgets.QLabel(self.centralwidget)
        self.menu_picture2.setGeometry(QtCore.QRect(550, 200, 181, 201))
        self.menu_picture2.setStyleSheet("image: url(:/main_picture/menu2.png);")
        self.menu_picture2.setText("")
        self.menu_picture2.setObjectName("menu_picture2")
        
        # 등록창으로 가는 버튼
        self.register_pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.register_pushButton.setGeometry(QtCore.QRect(310, 265, 180, 60))
        font = QtGui.QFont()
        font.setFamily("여기어때 잘난체 OTF")
        font.setPointSize(14)
        font.setBold(True)
        font.setWeight(75)
        self.register_pushButton.setFont(font)
        self.register_pushButton.setObjectName("register_pushButton")
        
        # 배경색 지정
        self.label_2 = QtWidgets.QLabel(self.centralwidget)
        self.label_2.setGeometry(QtCore.QRect(0, 0, 800, 480))
        self.label_2.setStyleSheet("background-color:rgb(245, 245, 245)")
        self.label_2.setText("")
        self.label_2.setObjectName("label_2")
        
        self.label_2.raise_()
        self.label.raise_()
        self.menu_picture2.raise_()
        self.menu_picture1.raise_()
        self.Tracking_pushButton.raise_()
        self.register_pushButton.raise_()
        self.input_pushButton.raise_()
        
        
        
        
        
        
        # 입력창
        
        self.widget = QtWidgets.QWidget(self.centralwidget)
        self.widget.setGeometry(QtCore.QRect(0, 0, 800, 480))
        self.widget.setObjectName("widget")
        self.input_picture = QtWidgets.QLabel(self.widget)
        
        # 책장 구분사진
        self.input_picture.setGeometry(QtCore.QRect(460, 20, 301, 471))
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
        sizePolicy.setHorizontalStretch(180)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.input_picture.sizePolicy().hasHeightForWidth())
        self.input_picture.setSizePolicy(sizePolicy)
        self.input_picture.setStyleSheet("image: url(:/inquiry/책장1.png);\n"
"")
        self.input_picture.setText("")
        self.input_picture.setObjectName("input_picture")
        
        # 바코드 입력 line edit
        self.lineEdit = QtWidgets.QLineEdit(self.widget)
        self.lineEdit.setGeometry(QtCore.QRect(230, 200, 191, 31))
        font = QtGui.QFont()
        font.setFamily("맑은 고딕")
        font.setPointSize(11)
        self.lineEdit.setFont(font)
        self.lineEdit.setText("")
        self.lineEdit.setObjectName("lineEdit")
        
        
        # 책장구역 line edit
        self.lineEdit_2 = QtWidgets.QLineEdit(self.widget)
        self.lineEdit_2.setGeometry(QtCore.QRect(230, 270, 191, 31))
        font = QtGui.QFont()
        font.setFamily("맑은 고딕")
        font.setPointSize(11)
        self.lineEdit_2.setFont(font)
        self.lineEdit_2.setText("")
        self.lineEdit_2.setObjectName("lineEdit_2")
        
        # 뒤로가기 버튼
        self.back_pushButton_1 = QtWidgets.QPushButton(self.widget)
        self.back_pushButton_1.setGeometry(QtCore.QRect(0, 0, 40, 30))
        self.back_pushButton_1.setStyleSheet("")
        self.back_pushButton_1.setText("")
        icon2 = QtGui.QIcon()
        icon2.addPixmap(QtGui.QPixmap(":/inquiry/back.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.back_pushButton_1.setIcon(icon2)
        self.back_pushButton_1.setIconSize(QtCore.QSize(25, 25))
        self.back_pushButton_1.setObjectName("back_pushButton_1")
        
        # 바코드 입력 label
        self.label_4 = QtWidgets.QLabel(self.widget)
        self.label_4.setGeometry(QtCore.QRect(70, 190, 151, 61))
        font = QtGui.QFont()
        font.setFamily("배달의민족 도현 OTF")
        font.setPointSize(20)
        font.setBold(False)
        font.setWeight(50)
        self.label_4.setFont(font)
        self.label_4.setObjectName("label_4")
        
        # 책장구역 label
        self.label_5 = QtWidgets.QLabel(self.widget)
        self.label_5.setGeometry(QtCore.QRect(70, 260, 131, 61))
        font = QtGui.QFont()
        font.setFamily("배달의민족 도현 OTF")
        font.setPointSize(20)
        self.label_5.setFont(font)
        self.label_5.setObjectName("label_5")
        
        # 배경색 지정(창을 겹쳐놔서 배경색으로 뒤로가져있는 창이 안보이도록 배경색 지정 )
        # 라벨을 이용해서 배경색을 넣어줬는ㄴ데 그 이유는 
        # 위젯 스타일시트로 배경색을 정해주면 버튼 디자인도 같이 바껴져서 안이쁨...
        self.label_3 = QtWidgets.QLabel(self.widget)
        self.label_3.setGeometry(QtCore.QRect(0, 0, 800, 480))
        self.label_3.setStyleSheet("background-color:rgb(245, 245, 245)")
        self.label_3.setText("")
        self.label_3.setObjectName("label_3")
        
        
        self.label_3.raise_()
        self.input_picture.raise_()
        self.lineEdit_2.raise_()
        self.back_pushButton_1.raise_()
        self.label_4.raise_()
        self.label_5.raise_()
        self.lineEdit.raise_()
        
        
        
        
        
        
        #등록 삭제창
        self.widget_2 = QtWidgets.QWidget(self.centralwidget)
        self.widget_2.setGeometry(QtCore.QRect(0, 0, 800, 480))
        self.widget_2.setFocusPolicy(QtCore.Qt.NoFocus)
        self.widget_2.setObjectName("widget_2")
        
        #책장 라벨
        self.label_6 = QtWidgets.QLabel(self.widget_2)
        self.label_6.setGeometry(QtCore.QRect(100, 50, 51, 41))
        font = QtGui.QFont()
        font.setFamily("배달의민족 도현 OTF")
        font.setPointSize(14)
        font.setBold(False)
        font.setWeight(50)
        self.label_6.setFont(font)
        self.label_6.setObjectName("label_6")
        
        #구역 라벨
        self.label_7 = QtWidgets.QLabel(self.widget_2)
        self.label_7.setGeometry(QtCore.QRect(301, 52, 51, 41))
        font = QtGui.QFont()
        font.setFamily("배달의민족 도현 OTF")
        font.setPointSize(14)
        font.setBold(False)
        font.setWeight(50)
        self.label_7.setFont(font)
        self.label_7.setObjectName("label_7")
        
        #바코드 입력 라벨
        self.label_8 = QtWidgets.QLabel(self.widget_2)
        self.label_8.setGeometry(QtCore.QRect(100, 110, 111, 21))
        font = QtGui.QFont()
        font.setFamily("배달의민족 도현 OTF")
        font.setPointSize(14)
        font.setBold(False)
        font.setWeight(50)
        self.label_8.setFont(font)
        self.label_8.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignTop)
        self.label_8.setObjectName("label_8")
        
        # 배경색 지정 이유는 입력창부분에서 설명
        self.label_9 = QtWidgets.QLabel(self.widget_2)
        self.label_9.setGeometry(QtCore.QRect(0, 0, 801, 481))
        self.label_9.setStyleSheet("background-color:rgb(245, 245, 245)")
        self.label_9.setText("")
        self.label_9.setObjectName("label_9")
        
        # 책장 선택 combobox A~H까지
        self.comboBox_1 = QtWidgets.QComboBox(self.widget_2)
        self.comboBox_1.setGeometry(QtCore.QRect(153, 56, 111, 25))
        font = QtGui.QFont()
        font.setFamily("맑은 고딕")
        font.setPointSize(11)
        font.setBold(False)
        font.setWeight(50)
        self.comboBox_1.setFont(font)
        self.comboBox_1.setObjectName("comboBox_1")
        self.comboBox_1.addItem("")
        self.comboBox_1.addItem("")
        self.comboBox_1.addItem("")
        self.comboBox_1.addItem("")
        self.comboBox_1.addItem("")
        self.comboBox_1.addItem("")
        self.comboBox_1.addItem("")
        self.comboBox_1.addItem("")
        
        # 책장 선택 combobox 1~6까지
        self.comboBox_2 = QtWidgets.QComboBox(self.widget_2)
        self.comboBox_2.setGeometry(QtCore.QRect(360, 56, 111, 25))
        font = QtGui.QFont()
        font.setFamily("맑은 고딕")
        font.setPointSize(11)
        self.comboBox_2.setFont(font)
        self.comboBox_2.setObjectName("comboBox_2")
        self.comboBox_2.addItem("")
        self.comboBox_2.addItem("")
        self.comboBox_2.addItem("")
        self.comboBox_2.addItem("")
        self.comboBox_2.addItem("")
        self.comboBox_2.addItem("")
        
        # 추가버튼
        self.add_pushButton = QtWidgets.QPushButton(self.widget_2)
        self.add_pushButton.setGeometry(QtCore.QRect(472, 108, 117, 25))
        font = QtGui.QFont()
        font.setFamily("새굴림")
        font.setPointSize(9)
        self.add_pushButton.setFont(font)
        self.add_pushButton.setObjectName("add_pushButton")
        self.delete_pushButton = QtWidgets.QPushButton(self.widget_2)
        self.delete_pushButton.setGeometry(QtCore.QRect(602, 108, 111, 25))
        font = QtGui.QFont()
        font.setFamily("Agency FB")
        font.setPointSize(9)
        
        # 삭제버튼
        self.delete_pushButton.setFont(font)
        self.delete_pushButton.setObjectName("delete_pushButton")
        self.listView = QtWidgets.QListView(self.widget_2)
        self.listView.setGeometry(QtCore.QRect(421, 165, 301, 275))
        self.listView.setObjectName("listView")
        
        # 바코드 입력 LINEEDIT
        self.lineEdit_3 = QtWidgets.QLineEdit(self.widget_2)
        self.lineEdit_3.setGeometry(QtCore.QRect(215, 108, 241, 25))
        font = QtGui.QFont()
        font.setFamily("맑은 고딕")
        font.setPointSize(11)
        self.lineEdit_3.setFont(font)
        self.lineEdit_3.setTabletTracking(False)
        self.lineEdit_3.setText("")
        self.lineEdit_3.setObjectName("lineEdit_3")
        
        # 책장사진
        self.register_picture_1 = QtWidgets.QLabel(self.widget_2)
        self.register_picture_1.setGeometry(QtCore.QRect(30, 115, 391, 391))
        self.register_picture_1.setStyleSheet("\n"
"image: url(:/register/책장1.png);")
        self.register_picture_1.setText("")
        self.register_picture_1.setObjectName("register_picture_1")
        
        # 뒤로가기
        self.back_pushButton_2 = QtWidgets.QPushButton(self.widget_2)
        self.back_pushButton_2.setGeometry(QtCore.QRect(0, 0, 40, 30))
        self.back_pushButton_2.setStyleSheet("")
        self.back_pushButton_2.setText("")
        icon3 = QtGui.QIcon()
        icon3.addPixmap(QtGui.QPixmap(":/register/back.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.back_pushButton_2.setIcon(icon3)
        self.back_pushButton_2.setIconSize(QtCore.QSize(25, 25))
        self.back_pushButton_2.setObjectName("back_pushButton_2")


        

        self.label_9.raise_()
        self.label_6.raise_()
        self.label_7.raise_()
        self.label_8.raise_()
        self.add_pushButton.raise_()
        self.delete_pushButton.raise_()
        self.back_pushButton_2.raise_()
        self.comboBox_1.raise_()
        self.comboBox_2.raise_()
        self.lineEdit_3.raise_()
        self.listView.raise_()
        self.register_picture_1.raise_()


        self.widget_2.raise_()
        self.widget.raise_()
        MainWindow.setCentralWidget(self.centralwidget)

        self.retranslateUi(MainWindow)
        # 입력창에서 뒤로가기 버튼을 클릭하면 HIDE
        self.back_pushButton_1.clicked.connect(self.widget.hide) # type: ignore
        # 등록창에서 뒤로가기 버튼을 클릭하면 HIE
        self.back_pushButton_2.clicked.connect(self.widget_2.hide) # type: ignore
        # 메인창에서 입력 버튼을 클릭하면 입력창 SHOW
        self.input_pushButton.clicked.connect(self.widget.show) # type: ignore
        # 메인창에서 등록/삭제 버튼을 클릭하면 등록창 SHOW        
        self.register_pushButton.clicked.connect(self.widget_2.show) # type: ignore
        
        
        QtCore.QMetaObject.connectSlotsByName(MainWindow)
        
        MainWindow.setTabOrder(self.input_pushButton, self.register_pushButton)
        MainWindow.setTabOrder(self.register_pushButton, self.Tracking_pushButton)
        MainWindow.setTabOrder(self.Tracking_pushButton, self.lineEdit)
        MainWindow.setTabOrder(self.lineEdit, self.lineEdit_2)
        MainWindow.setTabOrder(self.lineEdit_2, self.back_pushButton_1)
        MainWindow.setTabOrder(self.back_pushButton_1, self.comboBox_1)
        MainWindow.setTabOrder(self.comboBox_1, self.comboBox_2)
        MainWindow.setTabOrder(self.comboBox_2, self.lineEdit_3)
        MainWindow.setTabOrder(self.lineEdit_3, self.add_pushButton)
        MainWindow.setTabOrder(self.add_pushButton, self.delete_pushButton)
        MainWindow.setTabOrder(self.delete_pushButton, self.listView)
        MainWindow.setTabOrder(self.listView, self.back_pushButton_2)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.label.setText(_translate("MainWindow", "고북이"))
        self.input_pushButton.setText(_translate("MainWindow", "입력"))
        self.register_pushButton.setText(_translate("MainWindow", "등록 / 삭제"))
        
        
        self.label_4.setText(_translate("MainWindow", "바코드 입력"))
        self.label_5.setText(_translate("MainWindow", "책장 구역"))
        
        
        self.label_6.setText(_translate("MainWindow", "책장"))
        self.comboBox_1.setItemText(0, _translate("MainWindow", "A"))
        self.comboBox_1.setItemText(1, _translate("MainWindow", "B"))
        self.comboBox_1.setItemText(2, _translate("MainWindow", "C"))
        self.comboBox_1.setItemText(3, _translate("MainWindow", "D"))
        self.comboBox_1.setItemText(4, _translate("MainWindow", "E"))
        self.comboBox_1.setItemText(5, _translate("MainWindow", "F"))
        self.comboBox_1.setItemText(6, _translate("MainWindow", "G"))
        self.comboBox_1.setItemText(7, _translate("MainWindow", "H"))
        self.label_7.setText(_translate("MainWindow", "구역"))
        self.comboBox_2.setItemText(0, _translate("MainWindow", "1"))
        self.comboBox_2.setItemText(1, _translate("MainWindow", "2"))
        self.comboBox_2.setItemText(2, _translate("MainWindow", "3"))
        self.comboBox_2.setItemText(3, _translate("MainWindow", "4"))
        self.comboBox_2.setItemText(4, _translate("MainWindow", "5"))
        self.comboBox_2.setItemText(5, _translate("MainWindow", "6"))
        self.label_8.setText(_translate("MainWindow", "바코드 입력"))
        self.add_pushButton.setText(_translate("MainWindow", "추가"))
        self.delete_pushButton.setText(_translate("MainWindow", "삭제"))
        
        # 실행시 입력창과 등록창 HIDE 시켜 놓기
        # 버튼을 눌렀을 때 새로운 창을 뜨게 하는게 아니라 
        # 창 하나에서 입력과 등록 페이지를 오픈되게 만들라고 해서
        # 메인창 위에 위젯을 놓고 거기다가 입력창을 꾸미고
        # 그 입력창위에 위젯2를 놓고 등록창을 꾸몄..
        # 근데 이렇게 해서 실행하면 메인창이 먼저 뜨는게아니라 제일 위에 있는 위젯이 뜨기 때문에
        # 실행시 메인창이 보이게 하기 위해 
        # 입력창이 들어가 있는 위젯과 등록창이 들어가 잇는 위젯2를 하이드 시킨다        
        self.widget.setHidden(True) #  입력창 hide
        self.widget_2.setHidden(True) # 등록창 hide


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())
profile
먀먀먐

0개의 댓글