QTdesigner로 만든 GUI를 파이썬 프로그램에 연동시켜 작동하려합니다.(수정)

조회수 1176회

python 파일은 cmd창에서 실행을 기본적으로 하고 있는 코드입니다. [file의 경로 , file의 크기, 포트, 전송속도] 순으로 python파일 뒤에 차례대로 입력하여 실행하면 해당 파일이 실행됩니다 . 이파일을 QT Designer를 이용하여 만든 GUI에 적용하여 .exe파일로 만들어 cmd창을 열지않더라도 실행할수 있는 코딩을 하고자 합니다.

from __future__ import print_function
try:
    import sys
from builtins import bytes, int
import argparse
from serial import Serial
from intelhex import IntelHex
except ImportError:
    sys.exit("""ImportError: You are probably missing some modules.
To add needed modules, run 'python -m pip install -U future pyserial intelhex'""")

parser = argparse.ArgumentParser(
description='Serial bootloader script for Microchip tinyAVR 0-, 1-series and megaAVR 0-series MCUs',
epilog='Example: tiny_uploader.py ./App/Release/App.hex 0x2000 COM130 115200',
formatter_class=argparse.RawTextHelpFormatter)
parser.add_argument('file', help='Hex file to upload')
parser.add_argument('flashsize', help='Total device flash size')
parser.add_argument('comport', help='UART COM port')
parser.add_argument('baudrate', help='UART baud rate')
if len(sys.argv)==1:
    parser.print_help()
    sys.exit(1)
args = parser.parse_args()

file = sys.argv[1]
flashsize = int(sys.argv[2], 0)
comport = sys.argv[3]
baudrate = int(sys.argv[4], 0)

ih = IntelHex()
fileextension = file[-3:]
ih.loadfile(file, format=fileextension)
append = ih.maxaddr()
if (append > flashsize):
    print ("Error: Flashsize input: %#06x, " % (flashsize) +
           "Minimum size needed: %#06x." % (append))
    sys.exit(1)
appstart = ih.minaddr()
app = ih.tobinarray(end=flashsize-1)

uart = Serial(comport, baudrate=baudrate, timeout=1)

size = len(app)
failed = 0
counter = 0

print ("Uploading", size, "bytes...")
for byte in app:
    byte = bytes([byte])
    uart.write(byte)
    tmp_byte = uart.read(1)
    if (tmp_byte != byte):
        failed = 1
        break
    counter += 1
    print ("\r%.02f%%" % (float(counter)/size*100), end='')

if failed:
    print ("\nFailed at address %#06x" % (counter+appstart))
    tmp_byte = int.from_bytes(tmp_byte, byteorder="little")
    byte = int.from_bytes(byte, byteorder="little")
    print ("Value %#04x echoed, expected %#04x" % (tmp_byte, byte))
else:
    print ("\nOK")

이게 cmd창에서 실행하는 파일입니다 .

이 코딩과 아래의 코딩을 연동하려합니다.

from PyQt5 import QtWidgets, QtCore
from PyQt5.QtWidgets import *


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(450, 30, 231, 21))
        self.pushButton.setObjectName("pushButton")
        self.textEdit = QtWidgets.QTextEdit(self.centralwidget)
        self.textEdit.setGeometry(QtCore.QRect(80, 30, 331, 81))    
        self.textEdit.setObjectName("textEdit")
        self.textEdit_2 = QtWidgets.QTextEdit(self.centralwidget)
        self.textEdit_2.setGeometry(QtCore.QRect(80, 130, 331, 21))
        self.textEdit_2.setObjectName("textEdit_2")
        self.comboBox = QtWidgets.QComboBox(self.centralwidget)
        self.comboBox.setGeometry(QtCore.QRect(80, 170, 331, 21))
        self.comboBox.setObjectName("comboBox")
        self.comboBox.addItem("")
        self.comboBox.addItem("")
        self.comboBox.addItem("")
        self.comboBox.addItem("")
        self.comboBox.addItem("")
        self.comboBox.addItem("")
        self.textEdit_3 = QtWidgets.QTextEdit(self.centralwidget)
        self.textEdit_3.setGeometry(QtCore.QRect(80, 210, 331, 21))
        self.textEdit_3.setObjectName("textEdit_3")
        self.textEdit_4 = QtWidgets.QTextEdit(self.centralwidget)
        self.textEdit_4.setGeometry(QtCore.QRect(80, 240, 331, 91))
        self.textEdit_4.setObjectName("textEdit_4")
        self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_2.setGeometry(QtCore.QRect(450, 240, 231, 31))
        self.pushButton_2.setObjectName("pushButton_2")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(530, 210, 56, 12))
        self.label.setObjectName("label")
        self.label_2 = QtWidgets.QLabel(self.centralwidget)
        self.label_2.setGeometry(QtCore.QRect(530, 170, 56, 12))
        self.label_2.setObjectName("label_2")
        self.label_3 = QtWidgets.QLabel(self.centralwidget)
        self.label_3.setGeometry(QtCore.QRect(530, 130, 56, 16))
        self.label_3.setObjectName("label_3")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 21))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)
        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)
        self.pushButton.clicked.connect(self.ttn)
        self.pushButton_2.clicked.connect(self.ptn)
        self.comboBox.activated[str].connect(self.onActivated)
        text = self.textEdit_4.toPlainText()
        print(text)


    def ttn(self):
        fname = QFileDialog.getOpenFileName(self.centralwidget, './')
        self.textEdit.setText(fname[0])

    def onActivated(self):
        pass

    def ptn(self):
        file = self.textEdit.toPlainText('./')
        size = self.textEdit_2.toPlainText()
        box = self.comboBox.currentText()
        rate = self.textEdit_3.toPlainText()
        self.textEdit_4.setText(file + size + box + rate)
        text = [file + ' ' + size + ' ' + box + ' ' + rate]
        print(text)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.pushButton.setText(_translate("MainWindow", "파일 가져오기"))
        self.comboBox.setItemText(0, _translate("MainWindow", "COM1"))
        self.comboBox.setItemText(1, _translate("MainWindow", "COM2"))
        self.comboBox.setItemText(2, _translate("MainWindow", "COM3"))
        self.comboBox.setItemText(3, _translate("MainWindow", "COM4"))
        self.comboBox.setItemText(4, _translate("MainWindow", "COM5"))
        self.comboBox.setItemText(5, _translate("MainWindow", "COM6"))
        self.pushButton_2.setText(_translate("MainWindow", "확인"))
        self.label.setText(_translate("MainWindow", "통신 속도"))
        self.label_2.setText(_translate("MainWindow", "포트 번호"))
        self.label_3.setText(_translate("MainWindow", "파일 크기"))


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_())

두가지 코딩을 연결하여 .exe 파일로 만드는것이 최종목표입니다. 도와주시면 감사합니다.

  • (•́ ✖ •̀)
    알 수 없는 사용자
  • 코드 이미지 말고 텍스트로 해서 질문해 주세요. nowp 2021.6.1 08:39
  • 수정하였습니다 알 수 없는 사용자 2021.6.1 09:16

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)