Help us understand the problem. What is going on with this article?

Qt creator + pycharm + pyqt5+Anaconda3でMDIのアプリのサンプルを作るまで

More than 1 year has passed since last update.

とりあえず、Qtで作るMDIがどんなもんかを調べた時の手順
それぞれのツールはすでにインストールされている

Qt creator(4.5.0)上の作業

プロジェクトを作る

1.<ファイル><ファイル・プロジェクトの新規作成>
<プロジェクト:アプリケーション>
で[選択]
2.プロジェクト名とパスを指定して[次へ]
3.キットの選択で、インストールされているC++の環境を指定して[次へ]
4.クラス情報を設定(通常そのまま)で[次へ]
5.プロジェクト管理は、実情に合わせて設定して[完了]

メインウィンドウを作る

1.left sidebarの[プロジェクト名][forms][mainwindow.ui]をダブルクリック
2.メインウィンドウ画面の左上に出ているメニューの[ここに入力]をダブルクリックしてメニュー名(今回はFile)
3.続けて出てきたサブメニューに、サブメニューのキャプション(今回はwindow1とwindow2)
4.left sidebarの[Contailners]から"MDI Area"を選択して、Main window上にドラッグ
5.右側のプロパティー欄のオブジェクト"Main Window"を右クリックしてメニューから一番下のレイアウトを選び、その中のレイアウトを適当に選択する-->ウィンドウいっぱいにMDI Areaが広がる

サブウィンドウを作る

1.<ファイル><ファイル・プロジェクトの新規作成><ファイルとクラス:Qt>で[選択]
2.[Widget]を選択して[次へ]
3.パスで名前(今回がform1.ui)を設定して[次へ]
4.プロジェクト管理で[完了]
5.プロパティ欄のオブジェクト名を"Form1"に変更
6.適当に部品を配置
7.もうひとつ、form2の名前でフォームを作る

 保存する

Ctrl+Shift+S

pycharm(2017.3.3)上の作業

プロジェクトを作る

1.でプロジェクトを作る。
2.Qtで作ったmainwindow.uiを作ったプロジェクトのフォルダの下にコピーする

pyuic変換する準備をする

1.[Tools][External Tools]を選んで、真ん中上にある+ボタンをおす
2.Name:pyuic(これは別の名前でもよい)
Program:(Anacondaのあるフォルダ)\Library\bin\pyuic5.bat
Arguments: -o \$FileNameWithoutExtension\$.py \$FileNameWithoutExtension\$.ui
Working directory:\$FileDir\$
 で[OK]

Qtを使う準備

1.[Project Interpreter]を選んで、Project Interpreterのリストから、今回作成したプロジェクトを選ぶ
2."Latest"の左側の+ボタンを押す
3."pyqt5"で検索し、出てきたpyqt5を選んで[Install Package]ボタンを押す

uiをpyに変換

1.mainwindow.uiを選択肢右クリック[External Tools][pyuic]を選ぶ->mainwindow.pyが出来る
2.form1.ui,form2.uiについても同様に処理

最初のコードを書く

1.[File][New][Python File]でファイルを新規作成する"MdiTest"という名前にした
2.中味はこんなかんじ

MdiTest.py
#!/usr/bin/python3
# -*- coding: utf-8 -*-

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow
from xMainWindow import XMainWindow

app = QApplication(sys.argv)
window =XMainWindow()
window.show()
sys.exit(app.exec_())

サブウィンドウ用の処理を書く

1.[File][New][Python File]でファイルを新規作成する"xForm1"という名前にした
2.中味はこんなかんじ

xForm1.py
#!/usr/bin/python3
# -*- coding: utf-8 -*-

from form1 import Ui_Form1
from PyQt5 import QtWidgets

class form1(QtWidgets.QWidget, Ui_Form1):
    def __init__(self, parent=None):
        super(form1, self).__init__(parent)
        self.setupUi(self)
xForm2.py
#!/usr/bin/python3
# -*- coding: utf-8 -*-

from form2 import Ui_Form2
from PyQt5 import QtWidgets

class form2(QtWidgets.QWidget, Ui_Form2):
    def __init__(self, parent=None):
        super(form2, self).__init__(parent)
        self.setupUi(self)

main windowに対応する処理を書く

1.xMainWindow.pyを新規作成する
2.中味はこんなかんじ

xMainWindow.py
#!/usr/bin/python3
# -*- coding: utf-8 -*-

from PyQt5.QtWidgets import QApplication, QMainWindow
from mainwindow import Ui_MainWindow
from xForm1 import form1
from xForm2 import form2

class   XMainWindow(QMainWindow, Ui_MainWindow):
    def __init__(self):
        super(QMainWindow, self).__init__()
        self.setupUi(self)

        self.actionwindow1.triggered.connect(self.openForm1)
        self.actionwindow2.triggered.connect(self.openForm2)

    def openForm1(self):
        subWindow = form1(self.mdiArea)
        self.mdiArea.addSubWindow(subWindow)
        subWindow.show()
        print("openTest1Form")

    def openForm2(self):
        subWindow = form2(self.mdiArea)
        self.mdiArea.addSubWindow(subWindow)
        subWindow.show()
        print("openTest2Form")

 実行

MdiTest.pyを選択して右クリックして'Run MdiTest'

注意

form1とform2を作る時、レイアウトが指定されていないと、ウィンドウが最小の大きさで開くので注意
具体的には、Qt creatorのオブジェクトリストから"Form1 QWidget"を選んで右クリックして、コンテキストメニューからレイアウトを選んで、指定する

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away