とりあえず、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.中味はこんなかんじ
# !/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.中味はこんなかんじ
# !/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)
# !/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.中味はこんなかんじ
# !/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"を選んで右クリックして、コンテキストメニューからレイアウトを選んで、指定する