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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Qt Creator

Qt Creatorは、Qtアプリケーションを開発するための開発統合環境(IDE)です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

384閲覧

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

退会済みユーザー

退会済みユーザー

総合スコア0

Qt Creator

Qt Creatorは、Qtアプリケーションを開発するための開発統合環境(IDE)です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2018/04/07 06:36

編集2018/04/09 12:35

前提・実現したいこと

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

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

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

私は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/09 02:50

編集2018/04/13 02:19
BeatStar

総合スコア4958

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/04/09 12:36

ありがとうございます! 確かに全然分かんない質問内容でした。 一部修正しました。
BeatStar

2018/04/11 07:24

この"動かす"があいまいです。 もしかして"ボタンが押された" -> ダイアログAを表示してユーザに聞く みたいな処理はどこにどういう風に書けばいいか? ってことでしょうか? それとも QMainWindow等の呼び出し方法? それとも QMainWindow等の操作方法( 背景を黒にするとか )? イメージがしにくいです。
退会済みユーザー

退会済みユーザー

2018/04/11 13:46 編集

なんどもスミマセン。。 やりたいこと自体(ボタンを押すとlineEditの内容がboxBrowserに追加される)はこのコードでもできているのですが、コーディングがスマートではないのでうまい方法がないかと思っています。 詳しく色々説明しますと、 前提として、mainwindow.pyはいじらずにコーディングをしたいです。 ここではQtで作成したmainwindow.pyにて定義されているsetupUiメソッドを使って画面を立ち上げています。ただ、このメソッドは引数にMainWindowというものを持っており、かつこのMainWindowはsetCentralWidgetというメソッドを持つことになっています。 じゃあsetupUiに渡すオブジェクトはsetCentralWidgetを持ったクラスを継承させたものにでもすればいいんだろうなと思い、上記の②のコードを書いています。 これらは思った通りの動きをしているのですが、何が面倒臭いかというと、Qt Createrでモジュールを作成するたびに中身をみてどんなクラスを継承させるのか考えなければならないことです。本当面倒です。 これをそこまで面倒くさくなく解決できたり、またそもそも全然違う方法でコーディングしている人がいないかなと期待して、起票させていただきました。 以上です!!!
BeatStar

2018/04/13 02:15

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

退会済みユーザー

2018/04/15 11:04

なんども回答ありがとうございます! Qtはサンプルファイルも豊富なので、その中にヘルプファイルがないか見てみます。 また質問の仕方についても何度も根気強く指摘してくださってありがとうございます。したい質問はマジで沢山あるので、次からはもう少しわかりやすい(結局どうなりたいのかとか)質問をして行こうと思います!!!ありがとうございました!!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問