前提・実現したいこと
Qt Creater で作成したPython用のGUIのコードを
そのまま活かしてコーディングをしたいと思っています。
その場合、どうメインのモジュールから動かすかについて悩んでいます。
下記の通り一応動くものは作成できているのですが(②で①を動かす感じです)、
ちょっと不恰好になっています。
サンプルコードなどありましたら教えてもらえると嬉しいです。
(ググってみたんですが、Qtで作ったGUIモジュールをそのまま活かしているケースはあまりなく。。)
該当のソースコード
①mainwindow.py(Qtで作成したソース)
Python
1# -*- coding: utf-8 -*- 2 3# Form implementation generated from reading ui file 'mainwindow.ui' 4# 5# Created by: PyQt5 UI code generator 5.10.1 6# 7# WARNING! All changes made in this file will be lost! 8 9from PyQt5 import QtCore, QtGui, QtWidgets 10 11class Ui_MainWindow(object): 12 def setupUi(self, MainWindow): *引数にMainWindowが渡されている。 13 MainWindow.setObjectName("MainWindow") 14 MainWindow.resize(308, 206) 15 16 self.textBrowser = QtWidgets.QTextBrowser(MainWindow) 17 self.textBrowser.setGeometry(QtCore.QRect(40, 90, 180, 79)) 18 self.textBrowser.setObjectName("textBrowser") 19 20 self.centralWidget = QtWidgets.QWidget(MainWindow) 21 self.centralWidget.setObjectName("centralWidget") 22 23 self.pushButton = QtWidgets.QPushButton(self.centralWidget) 24 self.pushButton.setGeometry(QtCore.QRect(250, 40, 51, 21)) 25 self.pushButton.setObjectName("pushButton") 26 self.lineEdit = QtWidgets.QLineEdit(self.centralWidget) 27 self.lineEdit.setGeometry(QtCore.QRect(20, 10, 281, 21)) 28 self.lineEdit.setText("") 29 self.lineEdit.setObjectName("lineEdit") 30 MainWindow.setCentralWidget(self.centralWidget) *引数MainWindowにはsetCentralWidgetというメソッドがあることになっている。 31 32 self.retranslateUi(MainWindow) 33 QtCore.QMetaObject.connectSlotsByName(MainWindow) 34 35 def retranslateUi(self, MainWindow): 36 _translate = QtCore.QCoreApplication.translate 37 MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) 38 self.pushButton.setText(_translate("MainWindow", "SUBMIT"))
②Qtのモジュールを動かすモジュール
python
1from PyQt5.QtWidgets import (QApplication, QWidget, 2 QGridLayout, QVBoxLayout, QHBoxLayout, 3 QLabel, QLineEdit, QPushButton, QMainWindow) 4import mainwindow 5 6class MainWindow(QMainWindow): 7 # 適当なクラスを継承する。 8 # どのクラスを継承するかはQtで作った.pyファイルの内容に左右される。 9 # 今回は、mainwindow.py L30 の、 10 # MainWindow.setCentralWidget(self.centralWidget) 11 # にて出てくるsetCentralWidgetというメソッドを含むクラスを継承する必要があった。 12 # どのクラスを継承するか、というのはどこかのマニュアルにでも書いてないものかと思うが。。 13 # まあでも、とりあえずQWidgetを継承させてダメだったらQMainWindowを継承とかでもいいかもしれない。 14 15 def __init__(self, parent=None): 16 super(MainWindow, self).__init__(parent) 17 self.ui = mainwindow.Ui_MainWindow() 18 self.ui.setupUi(self) 19 # ここまで呪文。import元のコードのsetupUiを呼び出してセットアップする。 20 self.ui.pushButton.clicked.connect(self.submit) 21 # ここでどんなイベントを起こしたいのか記述する。 22 # self.ui.追加したオブジェクト名.イベント名.connect(self.メソッド名) 23 24 def submit(self): 25 # イベントによって動く具体的な部分。 26 text = self.ui.lineEdit.text() 27 self.ui.textBrowser.append(text) 28 29 30if __name__ == '__main__': 31 import sys 32 app = QApplication(sys.argv) 33 main_window = MainWindow() 34 main_window.show() 35 # main_windowの表示 36 sys.exit(app.exec_())
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/04/09 12:36
2018/04/11 07:24
退会済みユーザー
2018/04/11 13:46 編集
2018/04/13 02:15
退会済みユーザー
2018/04/15 11:04