편집 기록

편집 기록
  • 프로필 알 수 없는 사용자님의 편집
    날짜2017.12.26

    파이썬 3.6 PyQt5 질문


    list.py 와 ui와 view.py 에 관한 질문입니다. PyQt5로 작업하였고, pymysql 을 사용하였습니다. 답변 부탁드립니다 ㅠ

    ==list.py==

    coding: utf-8

    import sys

    import os

    from PyQt5 import QtWidgets

    from PyQt5 import QtGui

    from PyQt5 import uic

    from PyQt5 import QtCore

    from PyQt5.QtCore import pyqtSlot

    import pymysql

    conn = pymysql.connect(host='localhost', user='test', password='', db='test', charset='utf8')

    curs = conn.cursor()

    sql = "select * from customer" curs.execute(sql)

    rows = curs.fetchall()

    conn.close()

    class Form(QtWidgets.QDialog):

    def __init__(self, parent=None):
    
        QtWidgets.QDialog.__init__(self, parent)
        self.ui = uic.loadUi("list.ui", self)
        self.ui.show()
    
        self.ui.label_2.setText(rows[0][1]) # 김정수
        self.ui.label_3.setText(rows[1][1]) # 강수정
        self.ui.label_4.setText(rows[2][1]) # 이성진
        self.ui.label_5.setText(rows[3][1]) # 홍대기
    
    @pyqtSlot()
    def write(self):
        os.system('write.py');
    

    if name == 'main':

    app = QtWidgets.QApplication(sys.argv)
    
    w = Form()
    
    sys.exit(app.exec())
    

    질문 1

    여기서 self.ui.label_2.setText(rows[0][1]) 부분을 for 문으로 10개를 출력하려고 합니다. 그런데 그 방법을 모르겠습니다.. 그래서 지금은 일일이 저렇게 출력해놓기만 했습니다.. 어떻게 하면 10개를 저렇게 안 찍고 for 문으로 돌릴 수 있을까요?

    원하는 기능은 page= 1 이면, 0, 10 까지 출력하고, page=2 이면 10,20 .. 이런식으로 출력하길 원합니다.

    질문 2

    그리고 또 하고자 하는 것은 self.ui.label_2.setText(rows[0][1]) 을 클릭했을때 view.py 를 호출하면서 변수를 넘기고 싶습니다. 한마디로 뷰페이지로 링크되게 하는 기능을 원하는데 파이썬이라 이 기능을 찾고는 있는데 어떻게 이것을 적용할 수 있을까요?

    질문 3

    여기까지 list.py 에 대한 물음입니다. (그리고 Qt Designer 로 만들었기 때문에, list.ui 를 ui로 불러오는 방식을 취했는데, 만약 ui를 py 화 시켜서 작업해야한다면, 거기서도 막히는게 있었습니다. 그것은 write 함수의 정의에 대한 부분으로 에러가 먼저 출력이 되어서 거기서부터 계속 헤매고 있습니다. 도와주세요...

    cmd 에서 AttributeError: 'QDialog' object has no attribute 라고 뜨면서 에러가 납니다..

    list.ui를 py 화 시켰을 때는 아래 코드와 같습니다.

    -- coding: utf-8 --

    Form implementation generated from reading ui file 'C:\Users\Fortis-Aaron\AppData\Local\Programs\Python\Python36-32\Scripts\list.ui'

    Created by: PyQt5 UI code generator 5.9.2

    WARNING! All changes made in this file will be lost!

    from PyQt5 import QtCore, QtGui, QtWidgets

    class Ui_Dialog(object):

    def setupUi(self, Dialog):
        Dialog.setObjectName("Dialog")
        Dialog.resize(400, 300)
        self.label = QtWidgets.QLabel(Dialog)
        self.label.setGeometry(QtCore.QRect(60, 30, 281, 31))
        self.label.setAlignment(QtCore.Qt.AlignCenter)
        self.label.setObjectName("label")
        self.label_2 = QtWidgets.QLabel(Dialog)
        self.label_2.setGeometry(QtCore.QRect(40, 60, 321, 21))
        self.label_2.setAlignment(QtCore.Qt.AlignCenter)
        self.label_2.setObjectName("label_2")
        self.label_3 = QtWidgets.QLabel(Dialog)
        self.label_3.setGeometry(QtCore.QRect(40, 80, 321, 21))
        self.label_3.setAlignment(QtCore.Qt.AlignCenter)
        self.label_3.setObjectName("label_3")
        self.label_4 = QtWidgets.QLabel(Dialog)
        self.label_4.setGeometry(QtCore.QRect(40, 100, 321, 21))
        self.label_4.setAlignment(QtCore.Qt.AlignCenter)
        self.label_4.setObjectName("label_4")
        self.label_5 = QtWidgets.QLabel(Dialog)
        self.label_5.setGeometry(QtCore.QRect(40, 120, 321, 21))
        self.label_5.setAlignment(QtCore.Qt.AlignCenter)
        self.label_5.setObjectName("label_5")
        self.pushButton = QtWidgets.QPushButton(Dialog)
        self.pushButton.setGeometry(QtCore.QRect(310, 260, 75, 23))
        self.pushButton.setObjectName("pushButton")
    
        self.retranslateUi(Dialog)
        self.pushButton.clicked.connect(Dialog.write)  # 이 부분을 주석하면 잘되긴 하지만 write 글쓰기 함수를 실행할 수 없습니다..
        QtCore.QMetaObject.connectSlotsByName(Dialog)
    
    def retranslateUi(self, Dialog):
        _translate = QtCore.QCoreApplication.translate
        Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
        self.label.setText(_translate("Dialog", "제목"))
        self.label_2.setText(_translate("Dialog", "제목~"))
        self.label_3.setText(_translate("Dialog", "제목~"))
        self.label_4.setText(_translate("Dialog", "제목~"))
        self.label_5.setText(_translate("Dialog", "제목~"))
        self.pushButton.setText(_translate("Dialog", "글쓰기"))
    

    if name == "main":

    import sys
    app = QtWidgets.QApplication(sys.argv)
    Dialog = QtWidgets.QDialog()
    ui = Ui_Dialog()
    ui.setupUi(Dialog)
    Dialog.show()
    sys.exit(app.exec_())
    

    ui를 py화 시킨 이것을 통해서 write 함수에 대한 에러 부분이 해결되고, for 문을 돌려서 self.label_2.setText(_translate("Dialog", "제목~")) 를 페이지에 따라 10개를 출력할 수 있다면 좋겠습니다...ㅜ

    질문 4

    마지막으로 list.py 에서 '글쓰기' 버튼을 누르면 write 함수가 실행되어서 write.py 가 호출되었으면 좋겠습니다. 이 때, 저는 열려 있는 list.py 를 닫고 싶습니다. 그런데 닫혀지지 않는데 sys.exit() 를 써봐도 부모창을 닫는 기능을 찾지 못했는데요.. 이런 경우 어떻게 해결할 수 있을까요ㅠ?...? 부탁드립니다...ㅠㅠ

    최종적으로 원하는 것은 파이썬, PyQt5 를 통해서 게시판 윈도우 프로그램 완성입니다. 웹을 통해서 게시판을 만드는 것은 그렇게 어렵지 않았는데 파이썬을 통해서, GUI 프로그램 통해서 윈도우 프로그램으로 만드려니 이것저것 질문을 많이 하게 되는데요.. 답변 부탁드립니다....ㅠㅠ

    list.py(목록페이지), write.py(글쓰기 페이지), view.py(뷰 페이지)