質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.06%

Qt Createrで生成した.pyファイルの活用方法

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,161
退会済みユーザー

退会済みユーザー

 前提・実現したいこと

Qt Creater で作成したPython用のGUIのコードを
そのまま活かしてコーディングをしたいと思っています。
その場合、どうメインのモジュールから動かすかについて悩んでいます。

下記の通り一応動くものは作成できているのですが(②で①を動かす感じです)、
ちょっと不恰好になっています。

サンプルコードなどありましたら教えてもらえると嬉しいです。
(ググってみたんですが、Qtで作ったGUIモジュールをそのまま活かしているケースはあまりなく。。)

 該当のソースコード

①mainwindow.py(Qtで作成したソース)

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'mainwindow.ui'
#
# Created by: PyQt5 UI code generator 5.10.1
#
# WARNING! All changes made in this file will be lost!

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):   *引数にMainWindowが渡されている。
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(308, 206)

        self.textBrowser = QtWidgets.QTextBrowser(MainWindow)
        self.textBrowser.setGeometry(QtCore.QRect(40, 90, 180, 79))
        self.textBrowser.setObjectName("textBrowser")

        self.centralWidget = QtWidgets.QWidget(MainWindow)
        self.centralWidget.setObjectName("centralWidget")

        self.pushButton = QtWidgets.QPushButton(self.centralWidget)
        self.pushButton.setGeometry(QtCore.QRect(250, 40, 51, 21))
        self.pushButton.setObjectName("pushButton")
        self.lineEdit = QtWidgets.QLineEdit(self.centralWidget)
        self.lineEdit.setGeometry(QtCore.QRect(20, 10, 281, 21))
        self.lineEdit.setText("")
        self.lineEdit.setObjectName("lineEdit")
        MainWindow.setCentralWidget(self.centralWidget)   *引数MainWindowにはsetCentralWidgetというメソッドがあることになっている。

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.pushButton.setText(_translate("MainWindow", "SUBMIT"))

②Qtのモジュールを動かすモジュール

from PyQt5.QtWidgets import (QApplication, QWidget,
                             QGridLayout, QVBoxLayout, QHBoxLayout,
                             QLabel, QLineEdit, QPushButton, QMainWindow)
import mainwindow

class MainWindow(QMainWindow):
    # 適当なクラスを継承する。
    # どのクラスを継承するかはQtで作った.pyファイルの内容に左右される。
    # 今回は、mainwindow.py L30 の、
    # MainWindow.setCentralWidget(self.centralWidget)
    # にて出てくるsetCentralWidgetというメソッドを含むクラスを継承する必要があった。
    # どのクラスを継承するか、というのはどこかのマニュアルにでも書いてないものかと思うが。。
    # まあでも、とりあえずQWidgetを継承させてダメだったらQMainWindowを継承とかでもいいかもしれない。

    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        self.ui = mainwindow.Ui_MainWindow()
        self.ui.setupUi(self)
        # ここまで呪文。import元のコードのsetupUiを呼び出してセットアップする。
        self.ui.pushButton.clicked.connect(self.submit)
        # ここでどんなイベントを起こしたいのか記述する。
        # self.ui.追加したオブジェクト名.イベント名.connect(self.メソッド名)

    def submit(self):
        # イベントによって動く具体的な部分。
        text = self.ui.lineEdit.text()
        self.ui.textBrowser.append(text)


if __name__ == '__main__':
    import sys
    app = QApplication(sys.argv)
    main_window = MainWindow()
    main_window.show()
    # main_windowの表示
    sys.exit(app.exec_())
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

すみません。たぶんお力になれないかもしれませんが。

私はPythonはほとんど触っていません。なのでめちゃくちゃなこと言うかもしれませんが。


つまり、最初のpyファイルを definition.py, 二番目を main.py とし、

definition.pyの内容によって左右されるコード。ですよね?

その場合、どうメインのモジュールから動かすかについて悩んでいます
...
(ググってみたんですが、Qtで作ったGUIモジュールをそのまま活かしているケースはあまりなく。。)

とありますが、これはどういうことでしょうか?

C言語やC++でいうinclude, Javaでいうimportをする方法ってことでしょうか?

それとも起動方法?

情報があいまいすぎて理解できません...

こういう場合は、私なら

私は例えば ( 実際にはありえないと思いますが、あくまでイメージ。 )

python main.py pyall

( 最後のpyall は py + all で Javaでいうクラスパスみたいな...でっち上げですが。 )

みたいにできたらなぁと...

みたいに、実際にできたらいいなと思うイメージだったり画像だったりと相手がイメージしやすいように質問します.

[ 追記1 ]
効率のいい組み方ですか...
普通はdocumentation ( ヘルプファイルみたいなもの ) からさがして...ですかね。
で、毎回、今回のコードで言えばmainwindow.Ui_MainWindowクラスみたいなのを定義すると思います。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/04/11 22:45 編集

    なんどもスミマセン。。
    やりたいこと自体(ボタンを押すとlineEditの内容がboxBrowserに追加される)はこのコードでもできているのですが、コーディングがスマートではないのでうまい方法がないかと思っています。

    詳しく色々説明しますと、

    前提として、mainwindow.pyはいじらずにコーディングをしたいです。

    ここではQtで作成したmainwindow.pyにて定義されているsetupUiメソッドを使って画面を立ち上げています。ただ、このメソッドは引数にMainWindowというものを持っており、かつこのMainWindowはsetCentralWidgetというメソッドを持つことになっています。
    じゃあsetupUiに渡すオブジェクトはsetCentralWidgetを持ったクラスを継承させたものにでもすればいいんだろうなと思い、上記の②のコードを書いています。

    これらは思った通りの動きをしているのですが、何が面倒臭いかというと、Qt Createrでモジュールを作成するたびに中身をみてどんなクラスを継承させるのか考えなければならないことです。本当面倒です。
    これをそこまで面倒くさくなく解決できたり、またそもそも全然違う方法でコーディングしている人がいないかなと期待して、起票させていただきました。

    以上です!!!

    キャンセル

  • 2018/04/13 11:15

    もしかしたら私がまだ勘違いしている可能性もありますが、解答欄に記述しますね。

    キャンセル

  • 2018/04/15 20:04

    なんども回答ありがとうございます!
    Qtはサンプルファイルも豊富なので、その中にヘルプファイルがないか見てみます。

    また質問の仕方についても何度も根気強く指摘してくださってありがとうございます。したい質問はマジで沢山あるので、次からはもう少しわかりやすい(結局どうなりたいのかとか)質問をして行こうと思います!!!ありがとうございました!!!

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.06%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る