qt界面某个按钮事件没有响应是怎么回事?

0基础编界面问题:qt界面上子界面的一个按钮为什么没有响应?我单独把这个按钮实现的代码提取出来运行了一下可以实现,但为什么在main文件里不能实现?

img


from PySide2.QtWidgets import QApplication, QMessageBox, QMdiSubWindow, QFileDialog, QDialog, QAction,QTreeWidgetItem
from PySide2.QtUiTools import QUiLoader
from PySide2.QtCore import Qt,Slot
from PySide2.QtWidgets import QInputDialog,QLineEdit


import requests
import open3d as o3d
import numpy as np

from lib.share import SI,MySignals
from model_setting import Win_mconnection
from model import Win_Model

class Win_Main :

    def __init__(self):
        # 从文件中加载UI定义

        # 从 UI 定义中动态 创建一个相应的窗口对象
        # 注意:里面的控件对象也成为窗口对象的属性了
        # 比如 self.ui.button , self.ui.textEdit
        self.ui = QUiLoader().load('main.ui')
        self.ui.actiondk.triggered.connect(self.openFileDialog)
        self.ui.actionbc.triggered.connect(self.saveFileDialog)
        self.ui.actionxj.triggered.connect(self.saveFileDialog)

        self.ui.actioncd.triggered.connect(self.onsxcd)
        self.ui.opTree.itemDoubleClicked.connect(self.opTreeAction)




#打开窗口的操作
    def _openSubWin(self, FuncClass):

        def createSubWin():
            subWinFunc = FuncClass()
            # 先创建子窗口对象
            subWin = QMdiSubWindow()
            # 从ui定义文件中加载子窗口界面
            subWin.setWidget(subWinFunc.ui)
            subWin.setAttribute(Qt.WA_DeleteOnClose)
            # 把子窗口加入到MDI区域
            self.ui.mdiArea.addSubWindow(subWin)
            # 存入表中,注意winFunc对象也要保存, 不然对象没有引用,会销毁
            SI.subWinTable[str(FuncClass)] = {'subWin': subWin, 'subWinFunc': subWinFunc}
            # 显示子窗口
            subWin.show()
             # 子窗口提到最上层,并且最大化
            subWin.setWindowState(Qt.WindowActive | Qt.WindowMaximized)

            # 如果该功能类型实例不存在
        if str(FuncClass) not in SI.subWinTable:
             # 创建实例
             createSubWin()
             return
            # 如果已经存在,直接show-下
        subWin = SI.subWinTable[str(FuncClass)]['subWin']
        try:
            subWin.show()
            # 子窗口提到最上层,并且最大化
            subWin.setWindowState(Qt.WindowActive | Qt.WindowMaximized)
        except:
            # show异常原因肯定是用户手动关闭了该窗口,subWin对象已经不存在了
            createSubWin()

#树形菜单的操作
    def onsxcd(self):
        self.ui.opTree.setVisible(True)
        # 先清空树节点
        self.ui.opTree.clear()
        root = self.ui.opTree.invisibleRootItem()
        # 创建一个目录节点
        folderItem = QTreeWidgetItem()
        # 设置该节点第1个column. 文本
        folderItem.setText(0,'模型')
        root.addChild(folderItem)  # 添加到树的不可见根节点下,就成为第一 -层节点
        folderItem.setExpanded(True)  # 设置该节点为展开状态

        leafItem = QTreeWidgetItem()  # 叶子节点
        leafItem.setText(0,'部件')   #设置该节点第1 个column文本
        folderItem.addChild(leafItem)  # 添加到目录节点中
        leafItem = QTreeWidgetItem()
        leafItem.setText(0, '装配')
        folderItem.addChild(leafItem)

        folderItem = QTreeWidgetItem()
        folderItem.setText(0, '拼装')
        root.addChild(folderItem)  # 添加到树的不可见根节点下,就成为第一 -层节点
        folderItem.setExpanded(True)  # 设置该节点为展开状态

        leafItem = QTreeWidgetItem()  # 叶子节点
        leafItem.setText(0, '结果')  # 设置该节点第1 个column文本
        folderItem.addChild(leafItem)  # 添加到目录节点中
        leafItem = QTreeWidgetItem()
        leafItem.setText(0, '可视化')
        folderItem.addChild(leafItem)

        self.opTreeActionTable = {
           '部件': Win_mconnection,
        }
    def opTreeAction(self,item,column):
        clickedText = item.text(column)
        if clickedText not in self.opTreeActionTable:
            return
        actionWinFunc = self.opTreeActionTable[clickedText]
        self._openSubWin(actionWinFunc)

    def actionAddSubFolder(self):
        tree = self.ui.tree
        # 获取当前用户点选的节点
        currentItem = tree.currentItem()
        # 没有当前选中节点,不可见根节点作为当前节点
        if not currentItem:
            currentItem = tree.invisibleRootItem()
        # 让用户输入信息
        title, okPressed = QInputDialog.getText(
            self.ui, "输入部件名称",
            "名称:",
            QLineEdit.Normal,
            "")
        if not okPressed or title == '':
            return

        # 准备一folder节点
        folderItem = QTreeWidgetItem()
        # 创建图标对象
        #folderIcon = QIcon("./images/tree. png")
        # 设置节点图标
        #folderItem.setIcon(0, folderIcon)
        # 设置该节点 第1个column 文本
        folderItem.setText(0, title.strip())
        # 设置该节点在以前的flag基础上。多一个可编辑ItemIsEditable
        folderItem.setFlags(folderItem.flags() | Qt.QtItemIsEditable)
        currentItem.addChild(folderItem)
        currentItem.setExpanded(True)

    @ Slot()
    def openFileDialog(self):
        #dialog = QFileDialog()
        #dialog.setFileMode(QFileDialog.AnyFile)
        #dialog.setViewMode(QFileDialog.Detail)
        #if dialog.exec_():
           # fileNames = dialog.selectedFiles()
            #self.line_edit.setText(fileNames[0])
        dialog = QFileDialog()
        dialog.setFileMode(QFileDialog.AnyFile)
        dialog.setViewMode(QFileDialog.Detail)
        if dialog.exec_():
            filenames = dialog.selectedFiles()
            print('打开' + filenames[0])
            pcd = o3d.io.read_point_cloud(filenames[0], format='xyz')
            print(pcd)
            print(np.asarray(pcd.points))
            o3d.visualization.draw_geometries([pcd])

    def saveFileDialog(self):
        dialog1 = QFileDialog()
        dialog1.getSaveFileName()
        dialog1.setViewMode(QFileDialog.Detail)
        if dialog1.exec_():
            fileNames = dialog1.selectedFiles()
            self.line_edit.setText(fileNames[0])






app = QApplication([])
SI.mainWin = Win_Main()
SI.mainWin.ui.show()
app.exec_()


这一部分是子窗口按钮的代码

from PySide2.QtWidgets import QApplication, QMessageBox, QMdiSubWindow, QFileDialog, QDialog, QAction,QTreeWidgetItem
from PySide2.QtUiTools import QUiLoader
from PySide2.QtCore import Qt,Slot


import open3d as o3d
import numpy as np


from lib.share import SI,MySignals
#实例化
gms = MySignals()
class Win_Model:

    def __init__(self):

        self.ui = QUiLoader().load('model.ui')

        self.ui.but_drdysj.clicked.connect(self.opendyFile)

    @Slot()
    def opendyFile(self):
        dialog = QFileDialog()
        dialog.setFileMode(QFileDialog.AnyFile)
        dialog.setViewMode(QFileDialog.Detail)
        if dialog.exec_():
            filenames = dialog.selectedFiles()
            print('打开' + filenames[0])
            pcd = o3d.io.read_point_cloud(filenames[0], format='xyz')
            print(pcd)
            print(np.asarray(pcd.points))
            o3d.visualization.draw_geometries([pcd])


button没有triggered()的消息,只发送clicked(), toggled()等消息。