總目錄 >> PythonOCC入門進階到實戰(目前已更新入門篇、基礎篇和進階篇)
上一篇:運作一個執行個體
在實際的項目中,我們想要實作良好的與使用者的互動,圖形界面是我們不能忽視的部分。接下來的内容,我們會講到
1. 安裝圖形界面設計工具——QTdesigner
2.主界面添加菜單欄
3.彈出自定義對話框
一、安裝QTdesigner
我們安裝的pythonocc虛拟環境已經包含了pyqt的相關檔案,但是缺少了qtdesigner
qtdesigner也就是可視化的圖形界面設計器,可以讓你通過簡單的拖拉拽實作圖形界面的設計(如:主界面,對話框等),具體安裝步驟如下:
1.下載下傳一個pyqt5-tool.whl檔案:
連結:https://pan.baidu.com/s/1V-xdaFbR1R_3xswbQvyfTA
提取碼:5t3z
将此檔案放在anaconda prompt 預設進入的檔案夾(比如我的是 C:\Users\Administrator)
2.激活工具
然後程式代碼(在 anaconda prompt中輸入):
activate pythonocc #激活pythonocc環境
pip install PyQt5_Tools-5.7.dev1-py3-none-any.whl 在此環境中安裝此包
然後在(我的是在這裡)
D:\ProgramData\Anaconda3\envs\pythonocc\Lib\site-packages\PyQt5-tools\designer
找到qtdesigner
3.在pycharm中添加該工具
打開pycharm,進入externa tool 建立一個新的項目,按照圖檔中的内容命名即可:
在program選項中找到designer.exe(我的是在
D:\ProgramData\Anaconda3\envs\pythonocc\Lib\site-packages\PyQt5-tools\designer\designer.exe
)
在working directory 輸入:
$FileDir$
然後ok–>apply後,試着運作一下
在左側區域右鍵,打開qtdesigner
出現如下界面則為成功:
二、主界面添加菜單欄
代碼如下:(同時你可以在這裡獲得代碼檔案:https://download.csdn.net/download/weixin_42755384/10838771)
#首頁添加菜單欄,并在子菜單中可以打開檔案選擇對話框
from OCC.Display.SimpleGui import init_display
from OCC.gp import gp_Pnt
from PyQt5.QtWidgets import QFileDialog
if __name__ == '__main__':
display, start_display, add_menu, add_function_to_menu = init_display()
P0=gp_Pnt(0,0,1)
P1 =gp_Pnt(0, 30, 20)
menu_name = '打開'
menu_name2 = '繪制模型'
add_menu(menu_name)
add_menu(menu_name2)
add_function_to_menu(menu_name, QFileDialog.getOpenFileName)
start_display()
效果圖如下:
三、彈出自定義對話框
(以下程式檔案可在該處下載下傳:(有兩個檔案)https://download.csdn.net/download/weixin_42755384/10838823)
1.使用pyqtdesigner 設計一個對話框
如(一)中所介紹,從external tool中打開qtdesigner,選擇dialog with button
随便設計一個頁面
設計好後,使用pyuic(此處不詳述,可以自行百度)将ui界面轉成py程式
mydialog.py
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'mydialog.ui'
#
# Created by: PyQt5 UI code generator 5.6
#
# WARNING! All changes made in this file will be lost!
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Dialog(object):
def setupUi(self, Dialog):
Dialog.setObjectName("Dialog")
Dialog.resize(400, 300)
self.buttonBox = QtWidgets.QDialogButtonBox(Dialog)
self.buttonBox.setGeometry(QtCore.QRect(30, 240, 341, 32))
self.buttonBox.setOrientation(QtCore.Qt.Horizontal)
self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel|QtWidgets.QDialogButtonBox.Ok)
self.buttonBox.setObjectName("buttonBox")
self.pushButton = QtWidgets.QPushButton(Dialog)
self.pushButton.setGeometry(QtCore.QRect(180, 110, 93, 28))
self.pushButton.setObjectName("pushButton")
self.retranslateUi(Dialog)
self.buttonBox.accepted.connect(Dialog.accept)
self.buttonBox.rejected.connect(Dialog.reject)
QtCore.QMetaObject.connectSlotsByName(Dialog)
def retranslateUi(self, Dialog):
_translate = QtCore.QCoreApplication.translate
Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
self.pushButton.setText(_translate("Dialog", "PushButton"))
2.主函數(并在主函數中調用自定義對話框)
test2.py
(實作點選一個點彈出自定義對話框)
import sys
from OCC.Display.SimpleGui import init_display
from OCC.gp import gp_Pnt
from mydialog import* #調用自定義對話框
def mydialog(shp,*argus):
for point in shp:
myDialog = QtWidgets.QDialog()
ui = Ui_Dialog()
ui.setupUi(myDialog) # setupUi()是由.ui檔案生成的類的構造函數(初始化界面)
myDialog.show()
sys.exit(myDialog.exec_()) # 如果沒有這個函數,則對話框閃退
if __name__ == '__main__':
display, start_display, add_menu, add_function_to_menu = init_display()
P0=gp_Pnt(0,0,1)
P1 =gp_Pnt(0, 30, 20)
menu_name = '打開'
menu_name2 = '繪制模型'
add_menu(menu_name)
add_menu(menu_name2)
display.DisplayShape(P0)
display.SetSelectionModeVertex() # 啟動點的選中功能
display.register_select_callback(mydialog) #點選執行對話框
start_display()
結果如圖所示: