feat: 增加伴生包加载器、manifest配置,Excel处理优化
This commit is contained in:
@@ -0,0 +1,122 @@
|
||||
import os
|
||||
import logging
|
||||
|
||||
from PySide6.QtGui import *
|
||||
from PySide6.QtCore import *
|
||||
from PySide6.QtWidgets import *
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
from .mil_project_ui import Ui_FrameMILProject
|
||||
from mil.core import Config
|
||||
|
||||
class MILProject(QFrame, Ui_FrameMILProject):
|
||||
update_item_name_signal = Signal()
|
||||
update_item_data_path_signal = Signal(str,str)
|
||||
update_item_file_path_signal = Signal(str,str)
|
||||
|
||||
def __init__(self, config, name = None,parent = None):
|
||||
super().__init__(parent)
|
||||
self.setupUi(self)
|
||||
|
||||
self.initUI(config,name)
|
||||
|
||||
def initUI(self,config:Config, name:str):
|
||||
self.lineEditDataPath.setReadOnly(True)
|
||||
self.lineEditFilePath.setReadOnly(True)
|
||||
|
||||
self.name = name
|
||||
self.config = config
|
||||
self.ItemConfigs = config.ItemConfigs
|
||||
|
||||
if self.name is not None and self.name in self.ItemConfigs.keys():
|
||||
self.lineEditName.setText(name)
|
||||
self.lineEditDataPath.setText(self.ItemConfigs[self.name]["DataPath"])
|
||||
self.lineEditFilePath.setText(self.ItemConfigs[self.name]["FilePath"])
|
||||
else:
|
||||
self.pushButtonDataPath.setEnabled(False)
|
||||
self.pushButtonFilePath.setEnabled(False)
|
||||
self.lineEditName.setPlaceholderText("必填项!!!")
|
||||
self.lineEditDataPath.setPlaceholderText("点击【选择数据文件】按钮,选择路径!")
|
||||
self.lineEditFilePath.setPlaceholderText("点击【选择测试用例】按钮,选择路径!")
|
||||
|
||||
self.lineEditName.editingFinished.connect(self.on_name_editing_finished_event)
|
||||
self.lineEditDataPath.editingFinished.connect(self.on_datapath_editing_finished_event)
|
||||
self.lineEditFilePath.editingFinished.connect(self.on_filepath_editing_finished_event)
|
||||
|
||||
self.pushButtonDataPath.clicked.connect(self.on_data_path_event)
|
||||
self.pushButtonFilePath.clicked.connect(self.on_file_path_event)
|
||||
|
||||
def on_name_editing_finished_event(self):
|
||||
name = self.lineEditName.text()
|
||||
|
||||
if name.replace(" ", "") == "":
|
||||
self.lineEditName.setText(self.name)
|
||||
logger.warning("项目名称是必填项!!!")
|
||||
return
|
||||
if name == self.name:
|
||||
return
|
||||
|
||||
if self.name is None:
|
||||
self.name = name
|
||||
self.ItemConfigs[name] = dict()
|
||||
self.ItemConfigs[name]["DataPath"] = ""
|
||||
self.ItemConfigs[name]["FilePath"] = ""
|
||||
else:
|
||||
self.ItemConfigs[name] = self.ItemConfigs.pop(self.name)
|
||||
if self.name == self.config.CurrProject:
|
||||
self.config.CurrProject = name
|
||||
self.name = name
|
||||
|
||||
self.config.save_config()
|
||||
self.update_item_name_signal.emit()
|
||||
self.pushButtonDataPath.setEnabled(True)
|
||||
self.pushButtonFilePath.setEnabled(True)
|
||||
|
||||
def on_datapath_editing_finished_event(self):
|
||||
name = self.lineEditName.text()
|
||||
data_path = self.lineEditDataPath.text()
|
||||
|
||||
if data_path.replace(" ","") == "":
|
||||
logger.warning("数据文件路径无效!")
|
||||
return
|
||||
|
||||
self.ItemConfigs[name]["DataPath"] = data_path
|
||||
self.config.save_config()
|
||||
|
||||
self.update_item_data_path_signal.emit(name,data_path)
|
||||
|
||||
def on_filepath_editing_finished_event(self):
|
||||
name = self.lineEditName.text()
|
||||
file_path = self.lineEditFilePath.text()
|
||||
|
||||
if file_path.replace(" ","") == "":
|
||||
logger.warning("测试用例路径无效!")
|
||||
return
|
||||
|
||||
self.ItemConfigs[name]["FilePath"] = file_path
|
||||
self.config.save_config()
|
||||
|
||||
self.update_item_file_path_signal.emit(name,file_path)
|
||||
|
||||
def on_data_path_event(self):
|
||||
dataPath = self.lineEditDataPath.text()
|
||||
if os.path.exists(dataPath):
|
||||
path,type = QFileDialog.getOpenFileName(self, "选择文件", dataPath,"Excel工作簿(*.xlsx)")
|
||||
else:
|
||||
path,type = QFileDialog.getOpenFileName(self, "选择文件", "./","Excel工作簿(*.xlsx)")
|
||||
if not os.path.exists(path):
|
||||
return
|
||||
self.lineEditDataPath.setText(path)
|
||||
self.on_datapath_editing_finished_event()
|
||||
|
||||
def on_file_path_event(self):
|
||||
filePath = self.lineEditFilePath.text()
|
||||
if os.path.exists(filePath):
|
||||
path,type = QFileDialog.getOpenFileName(self, "选择文件", filePath,"Excel工作簿(*.xlsx)")
|
||||
else:
|
||||
path,type = QFileDialog.getOpenFileName(self, "选择文件", "./","Excel工作簿(*.xlsx)")
|
||||
if not os.path.exists(path):
|
||||
return
|
||||
self.lineEditFilePath.setText(path)
|
||||
self.on_filepath_editing_finished_event()
|
||||
@@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>FrameProject</class>
|
||||
<widget class="QFrame" name="FrameProject">
|
||||
<class>FrameMILProject</class>
|
||||
<widget class="QFrame" name="FrameMILProject">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
|
||||
+23
-23
@@ -18,26 +18,26 @@ from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor,
|
||||
from PySide6.QtWidgets import (QApplication, QFrame, QGridLayout, QLabel,
|
||||
QLineEdit, QPushButton, QSizePolicy, QWidget)
|
||||
|
||||
class Ui_FrameProject(object):
|
||||
def setupUi(self, FrameProject):
|
||||
if not FrameProject.objectName():
|
||||
FrameProject.setObjectName(u"FrameProject")
|
||||
FrameProject.resize(740, 95)
|
||||
self.gridLayout_4 = QGridLayout(FrameProject)
|
||||
class Ui_FrameMILProject(object):
|
||||
def setupUi(self, FrameMILProject):
|
||||
if not FrameMILProject.objectName():
|
||||
FrameMILProject.setObjectName(u"FrameMILProject")
|
||||
FrameMILProject.resize(740, 95)
|
||||
self.gridLayout_4 = QGridLayout(FrameMILProject)
|
||||
self.gridLayout_4.setObjectName(u"gridLayout_4")
|
||||
self.gridLayout = QGridLayout()
|
||||
self.gridLayout.setObjectName(u"gridLayout")
|
||||
self.label = QLabel(FrameProject)
|
||||
self.label = QLabel(FrameMILProject)
|
||||
self.label.setObjectName(u"label")
|
||||
|
||||
self.gridLayout.addWidget(self.label, 0, 0, 1, 1)
|
||||
|
||||
self.label_2 = QLabel(FrameProject)
|
||||
self.label_2 = QLabel(FrameMILProject)
|
||||
self.label_2.setObjectName(u"label_2")
|
||||
|
||||
self.gridLayout.addWidget(self.label_2, 1, 0, 1, 1)
|
||||
|
||||
self.label_3 = QLabel(FrameProject)
|
||||
self.label_3 = QLabel(FrameMILProject)
|
||||
self.label_3.setObjectName(u"label_3")
|
||||
|
||||
self.gridLayout.addWidget(self.label_3, 2, 0, 1, 1)
|
||||
@@ -47,7 +47,7 @@ class Ui_FrameProject(object):
|
||||
|
||||
self.gridLayout_2 = QGridLayout()
|
||||
self.gridLayout_2.setObjectName(u"gridLayout_2")
|
||||
self.lineEditName = QLineEdit(FrameProject)
|
||||
self.lineEditName = QLineEdit(FrameMILProject)
|
||||
self.lineEditName.setObjectName(u"lineEditName")
|
||||
sizePolicy = QSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Preferred)
|
||||
sizePolicy.setHorizontalStretch(0)
|
||||
@@ -57,14 +57,14 @@ class Ui_FrameProject(object):
|
||||
|
||||
self.gridLayout_2.addWidget(self.lineEditName, 0, 0, 1, 1)
|
||||
|
||||
self.lineEditDataPath = QLineEdit(FrameProject)
|
||||
self.lineEditDataPath = QLineEdit(FrameMILProject)
|
||||
self.lineEditDataPath.setObjectName(u"lineEditDataPath")
|
||||
sizePolicy.setHeightForWidth(self.lineEditDataPath.sizePolicy().hasHeightForWidth())
|
||||
self.lineEditDataPath.setSizePolicy(sizePolicy)
|
||||
|
||||
self.gridLayout_2.addWidget(self.lineEditDataPath, 1, 0, 1, 1)
|
||||
|
||||
self.lineEditFilePath = QLineEdit(FrameProject)
|
||||
self.lineEditFilePath = QLineEdit(FrameMILProject)
|
||||
self.lineEditFilePath.setObjectName(u"lineEditFilePath")
|
||||
sizePolicy.setHeightForWidth(self.lineEditFilePath.sizePolicy().hasHeightForWidth())
|
||||
self.lineEditFilePath.setSizePolicy(sizePolicy)
|
||||
@@ -76,7 +76,7 @@ class Ui_FrameProject(object):
|
||||
|
||||
self.gridLayout_3 = QGridLayout()
|
||||
self.gridLayout_3.setObjectName(u"gridLayout_3")
|
||||
self.pushButtonDataPath = QPushButton(FrameProject)
|
||||
self.pushButtonDataPath = QPushButton(FrameMILProject)
|
||||
self.pushButtonDataPath.setObjectName(u"pushButtonDataPath")
|
||||
sizePolicy1 = QSizePolicy(QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding)
|
||||
sizePolicy1.setHorizontalStretch(0)
|
||||
@@ -86,7 +86,7 @@ class Ui_FrameProject(object):
|
||||
|
||||
self.gridLayout_3.addWidget(self.pushButtonDataPath, 0, 0, 1, 1)
|
||||
|
||||
self.pushButtonFilePath = QPushButton(FrameProject)
|
||||
self.pushButtonFilePath = QPushButton(FrameMILProject)
|
||||
self.pushButtonFilePath.setObjectName(u"pushButtonFilePath")
|
||||
sizePolicy1.setHeightForWidth(self.pushButtonFilePath.sizePolicy().hasHeightForWidth())
|
||||
self.pushButtonFilePath.setSizePolicy(sizePolicy1)
|
||||
@@ -97,18 +97,18 @@ class Ui_FrameProject(object):
|
||||
self.gridLayout_4.addLayout(self.gridLayout_3, 0, 2, 1, 1)
|
||||
|
||||
|
||||
self.retranslateUi(FrameProject)
|
||||
self.retranslateUi(FrameMILProject)
|
||||
|
||||
QMetaObject.connectSlotsByName(FrameProject)
|
||||
QMetaObject.connectSlotsByName(FrameMILProject)
|
||||
# setupUi
|
||||
|
||||
def retranslateUi(self, FrameProject):
|
||||
FrameProject.setWindowTitle(QCoreApplication.translate("FrameProject", u"Frame", None))
|
||||
self.label.setText(QCoreApplication.translate("FrameProject", u"\u6a21\u578b\u9879\u76ee\uff1a", None))
|
||||
self.label_2.setText(QCoreApplication.translate("FrameProject", u"\u6570\u636e\u6587\u4ef6\uff1a", None))
|
||||
self.label_3.setText(QCoreApplication.translate("FrameProject", u"\u6d4b\u8bd5\u7528\u4f8b\uff1a", None))
|
||||
def retranslateUi(self, FrameMILProject):
|
||||
FrameMILProject.setWindowTitle(QCoreApplication.translate("FrameMILProject", u"Frame", None))
|
||||
self.label.setText(QCoreApplication.translate("FrameMILProject", u"\u6a21\u578b\u9879\u76ee\uff1a", None))
|
||||
self.label_2.setText(QCoreApplication.translate("FrameMILProject", u"\u6570\u636e\u6587\u4ef6\uff1a", None))
|
||||
self.label_3.setText(QCoreApplication.translate("FrameMILProject", u"\u6d4b\u8bd5\u7528\u4f8b\uff1a", None))
|
||||
self.lineEditName.setText("")
|
||||
self.pushButtonDataPath.setText(QCoreApplication.translate("FrameProject", u"\u9009\u62e9\u6570\u636e\u6587\u4ef6", None))
|
||||
self.pushButtonFilePath.setText(QCoreApplication.translate("FrameProject", u"\u9009\u62e9\u6d4b\u8bd5\u7528\u4f8b", None))
|
||||
self.pushButtonDataPath.setText(QCoreApplication.translate("FrameMILProject", u"\u9009\u62e9\u6570\u636e\u6587\u4ef6", None))
|
||||
self.pushButtonFilePath.setText(QCoreApplication.translate("FrameMILProject", u"\u9009\u62e9\u6d4b\u8bd5\u7528\u4f8b", None))
|
||||
# retranslateUi
|
||||
|
||||
|
||||
+174
-8
@@ -1,8 +1,13 @@
|
||||
import os
|
||||
import logging
|
||||
|
||||
from pathlib import Path
|
||||
from .mil_tool_ui import Ui_FrameMILTool
|
||||
from PySide6.QtWidgets import QFrame
|
||||
from PySide6.QtGui import *
|
||||
from PySide6.QtCore import *
|
||||
from PySide6.QtWidgets import *
|
||||
|
||||
from .mil_project import MILProject
|
||||
|
||||
from mil.core import Config
|
||||
|
||||
@@ -11,16 +16,177 @@ logger = logging.getLogger(__name__)
|
||||
CONF = "mil.json"
|
||||
|
||||
class FrameMILTool(QFrame,Ui_FrameMILTool):
|
||||
def __init__(self,parent=None):
|
||||
def __init__(self,workspace:Path, parent=None):
|
||||
super().__init__(parent)
|
||||
self.setupUi(self)
|
||||
|
||||
self.initUI()
|
||||
self.initUI(workspace)
|
||||
|
||||
def initUI(self):
|
||||
self.config = Config()
|
||||
if os.path.exists(CONF):
|
||||
self.config.load_config(CONF)
|
||||
|
||||
def initUI(self, workspace:Path):
|
||||
self.workspace = workspace
|
||||
if not self.workspace.exists():
|
||||
os.mkdir(self.workspace)
|
||||
self.conf = self.workspace.joinpath(CONF)
|
||||
|
||||
self.config = Config(self.conf)
|
||||
if self.config.check_path():
|
||||
self.config.load_config()
|
||||
self.checkBox.setChecked(self.config.AddTimeEn)
|
||||
if self.config.GeratePath:
|
||||
self.radioButtonData.setChecked(True)
|
||||
else:
|
||||
self.radioButtonFile.setChecked(True)
|
||||
else:
|
||||
self.config.save_config(CONF)
|
||||
self.config.save_config()
|
||||
self.update_config()
|
||||
|
||||
for key in self.config.ItemConfigs.keys():
|
||||
self.add_pro_event(key)
|
||||
|
||||
self.menu = QMenu(self.listWidget)
|
||||
self.new_pro_acction = QAction("新建项目", self)
|
||||
self.new_pro_acction.triggered.connect(self.on_new_pro_event)
|
||||
|
||||
self.del_pro_acction = QAction("删除项目", self)
|
||||
self.del_pro_acction.triggered.connect(self.on_del_pro_event)
|
||||
self.menu.addAction(self.new_pro_acction)
|
||||
self.menu.addAction(self.del_pro_acction)
|
||||
|
||||
self.DataPath.setReadOnly(True)
|
||||
self.FilePath.setReadOnly(True)
|
||||
|
||||
self.DataButton.clicked.connect(self.on_load_data_path)
|
||||
self.FileButton.clicked.connect(self.on_load_file_path)
|
||||
|
||||
self.checkBox.toggled.connect(self.on_select_add_time_en)
|
||||
self.radioButtonData.toggled.connect(self.on_select_gerate_path)
|
||||
self.comboBox.currentTextChanged.connect(self.on_text_changed_event)
|
||||
self.listWidget.customContextMenuRequested.connect(self.on_ContextMenuRequested)
|
||||
|
||||
def update_config(self):
|
||||
self.comboBox.clear()
|
||||
if self.config.ItemConfigs.keys().__len__() == 0:
|
||||
return
|
||||
|
||||
self.lock_event = True
|
||||
for key in self.config.ItemConfigs.keys():
|
||||
self.comboBox.addItem(key)
|
||||
self.lock_event = False
|
||||
|
||||
|
||||
if self.config.CurrProject == "":
|
||||
self.config.CurrProject = self.comboBox.currentText()
|
||||
self.config.save_config()
|
||||
|
||||
self.DataPath.setText(self.config.ItemConfigs[self.comboBox.currentText()]["DataPath"])
|
||||
self.FilePath.setText(self.config.ItemConfigs[self.comboBox.currentText()]["FilePath"])
|
||||
else:
|
||||
self.comboBox.setCurrentText(self.config.CurrProject)
|
||||
self.DataPath.setText(self.config.ItemConfigs[self.config.CurrProject]["DataPath"])
|
||||
self.FilePath.setText(self.config.ItemConfigs[self.config.CurrProject]["FilePath"])
|
||||
|
||||
def on_update_data_path_event(self,name,data_path):
|
||||
if name == self.comboBox.currentText():
|
||||
self.DataPath.setText(data_path)
|
||||
|
||||
def on_update_file_path_event(self,name,file_path):
|
||||
if name == self.comboBox.currentText():
|
||||
self.FilePath.setText(file_path)
|
||||
|
||||
def on_select_gerate_path(self,checked):
|
||||
self.config.GeratePath = checked
|
||||
self.config.save_config()
|
||||
|
||||
def on_select_add_time_en(self,checked):
|
||||
self.config.AddTimeEn = checked
|
||||
self.config.save_config()
|
||||
|
||||
def on_ContextMenuRequested(self,point:QPoint):
|
||||
self.menu.exec_(QCursor.pos())
|
||||
|
||||
def on_text_changed_event(self,text:str):
|
||||
if text == "" or self.lock_event:
|
||||
return
|
||||
|
||||
self.config.CurrProject= text
|
||||
self.config.save_config()
|
||||
|
||||
self.DataPath.setText(self.config.ItemConfigs[self.config.CurrProject]["DataPath"])
|
||||
self.FilePath.setText(self.config.ItemConfigs[self.config.CurrProject]["FilePath"])
|
||||
pass
|
||||
|
||||
def on_new_pro_event(self):
|
||||
item = QListWidgetItem()
|
||||
mil_project = MILProject(self.config)
|
||||
mil_project.update_item_name_signal.connect(self.update_config)
|
||||
mil_project.update_item_data_path_signal.connect(self.on_update_data_path_event)
|
||||
mil_project.update_item_file_path_signal.connect(self.on_update_file_path_event)
|
||||
|
||||
item.setSizeHint(QSize(mil_project.sizeHint().width(), 150))
|
||||
self.listWidget.addItem(item)
|
||||
self.listWidget.setCurrentItem(item)
|
||||
self.listWidget.setItemWidget(item, mil_project)
|
||||
pass
|
||||
|
||||
def add_pro_event(self, name):
|
||||
item = QListWidgetItem()
|
||||
mil_project = MILProject(self.config, name=name)
|
||||
mil_project.update_item_name_signal.connect(self.update_config)
|
||||
mil_project.update_item_data_path_signal.connect(self.on_update_data_path_event)
|
||||
mil_project.update_item_file_path_signal.connect(self.on_update_file_path_event)
|
||||
|
||||
item.setSizeHint(QSize(mil_project.sizeHint().width(), 150))
|
||||
self.listWidget.addItem(item)
|
||||
self.listWidget.setCurrentItem(item)
|
||||
self.listWidget.setItemWidget(item, mil_project)
|
||||
|
||||
def on_del_pro_event(self):
|
||||
mil_project = self.listWidget.itemWidget(self.listWidget.currentItem())
|
||||
if not isinstance(mil_project,MILProject):
|
||||
raise "on_del_pro_event error!!!"
|
||||
|
||||
if self.config.CurrProject == mil_project.name:
|
||||
self.config.CurrProject = ""
|
||||
|
||||
self.listWidget.takeItem(self.listWidget.currentRow())
|
||||
self.config.ItemConfigs.pop(mil_project.name)
|
||||
self.config.save_config()
|
||||
|
||||
self.update_config()
|
||||
pass
|
||||
|
||||
def search_mil_pro_item(self, name):
|
||||
for mil_project in self.listWidget.findChildren(MILProject):
|
||||
if not isinstance(mil_project,MILProject):
|
||||
return
|
||||
if mil_project.name == name:
|
||||
return mil_project
|
||||
return None
|
||||
|
||||
def on_load_data_path(self):
|
||||
data_path = self.DataPath.text()
|
||||
if os.path.exists(data_path):
|
||||
path,type = QFileDialog.getOpenFileName(self, "选择文件", data_path,"Excel工作簿(*.xlsx)")
|
||||
else:
|
||||
path,type = QFileDialog.getOpenFileName(self, "选择文件", os.getcwd(),"Excel工作簿(*.xlsx)")
|
||||
self.DataPath.setText(path)
|
||||
|
||||
self.config.ItemConfigs[self.config.CurrProject]["DataPath"] = path
|
||||
mil_project = self.search_mil_pro_item(self.config.CurrProject)
|
||||
mil_project.lineEditDataPath.setText(path)
|
||||
self.config.save_config()
|
||||
|
||||
|
||||
def on_load_file_path(self):
|
||||
file_path = self.FilePath.text()
|
||||
if os.path.exists(file_path):
|
||||
path,type = QFileDialog.getOpenFileName(self, "选择文件", file_path,"Excel工作簿(*.xlsx)")
|
||||
else:
|
||||
path,type = QFileDialog.getOpenFileName(self, "选择文件", os.getcwd(),"Excel工作簿(*.xlsx)")
|
||||
self.FilePath.setText(path)
|
||||
|
||||
self.config.ItemConfigs[self.config.CurrProject]["FilePath"] = path
|
||||
mil_project = self.search_mil_pro_item(self.config.CurrProject)
|
||||
mil_project.lineEditFilePath.setText(path)
|
||||
self.config.save_config()
|
||||
|
||||
+6
-2
@@ -17,7 +17,7 @@
|
||||
<item row="0" column="0">
|
||||
<widget class="QTabWidget" name="tabWidget">
|
||||
<property name="tabPosition">
|
||||
<enum>QTabWidget::TabPosition::South</enum>
|
||||
<enum>QTabWidget::TabPosition::North</enum>
|
||||
</property>
|
||||
<property name="currentIndex">
|
||||
<number>0</number>
|
||||
@@ -354,7 +354,11 @@
|
||||
</attribute>
|
||||
<layout class="QGridLayout" name="gridLayout_11">
|
||||
<item row="0" column="0">
|
||||
<widget class="QListWidget" name="listWidget"/>
|
||||
<widget class="QListWidget" name="listWidget">
|
||||
<property name="contextMenuPolicy">
|
||||
<enum>Qt::ContextMenuPolicy::CustomContextMenu</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
|
||||
@@ -29,7 +29,7 @@ class Ui_FrameMILTool(object):
|
||||
self.gridLayout_8.setObjectName(u"gridLayout_8")
|
||||
self.tabWidget = QTabWidget(FrameMILTool)
|
||||
self.tabWidget.setObjectName(u"tabWidget")
|
||||
self.tabWidget.setTabPosition(QTabWidget.TabPosition.South)
|
||||
self.tabWidget.setTabPosition(QTabWidget.TabPosition.North)
|
||||
self.widget = QWidget()
|
||||
self.widget.setObjectName(u"widget")
|
||||
self.gridLayout_12 = QGridLayout(self.widget)
|
||||
@@ -272,6 +272,7 @@ class Ui_FrameMILTool(object):
|
||||
self.gridLayout_11.setObjectName(u"gridLayout_11")
|
||||
self.listWidget = QListWidget(self.tab_2)
|
||||
self.listWidget.setObjectName(u"listWidget")
|
||||
self.listWidget.setContextMenuPolicy(Qt.ContextMenuPolicy.CustomContextMenu)
|
||||
|
||||
self.gridLayout_11.addWidget(self.listWidget, 0, 0, 1, 1)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user