Python 当我专门双击鼠标左键(双击鼠标右键有效)时,Pyqt5崩溃,没有错误

Python 当我专门双击鼠标左键(双击鼠标右键有效)时,Pyqt5崩溃,没有错误,python,python-3.x,pyqt,pyqt5,Python,Python 3.x,Pyqt,Pyqt5,我正在用Python创建这个应用程序,它与Outlook对话,并检索关于每个文件夹中邮件数量的一些数据和一些其他内容,我正在使用PyQt5来实现这一点 但是当我给一个函数分配一个信号时,发生了一些事情: self.table\u小部件.itemDoubleClicked.connect(self.some\u函数) 如果我双击这个项目,一切正常。但是如果我用左键点击,它就会冻结,然后在没有任何错误屏幕的情况下崩溃(通常如果你执行程序,当它崩溃时,你可以在控制台后面看到一些堆栈,对吗?在这种情况

我正在用Python创建这个应用程序,它与Outlook对话,并检索关于每个文件夹中邮件数量的一些数据和一些其他内容,我正在使用PyQt5来实现这一点

但是当我给一个函数分配一个信号时,发生了一些事情:

self.table\u小部件.itemDoubleClicked.connect(self.some\u函数)
如果我双击这个项目,一切正常。但是如果我用左键点击,它就会冻结,然后在没有任何错误屏幕的情况下崩溃(通常如果你执行程序,当它崩溃时,你可以在控制台后面看到一些堆栈,对吗?在这种情况下,实际上什么都没有显示)

我不确定我是否用对了他发出的信号,所以可能有什么

无论如何,由于没有发生错误,我试着把一些打印出来看看它会在哪里崩溃,但结果是t2屏幕加载得很好,显然当代码返回到主循环时它崩溃了。。。?我不知道,我不可能调试那些东西

我将尝试在这里只放置基本代码,以便更容易看到错误,但如果这还不够,我可以显示一些细节

编辑

根据要求,我在下面做了一个最小可复制的示例,它确实以相同的方式崩溃:

从PyQt5.QtCore导入QDateTime、Qt、QTimer、pyqtSignal
从PyQt5.QtWidgets导入QApplication、QMainWindow、QDialog、QTableWidgetItem
从PyQt5导入uic
导入系统,操作系统
t0类(QMainWindow):
开关\u窗口=pyqtSignal()
定义初始化(自):
super(t0,self)。\uuuuu init\uuuuuuuu()
uic.loadUi(Controller.application\u path+r'\UI\t0.UI',self)
#这个.ui文件几乎有一个按钮可以点击
self.btn\u确定。单击。连接(self.onButtonClick1)
def onButtonClick1(自身):
self.switch_window.emit()
t1类(QDialog):
开关\u窗口=pyqtSignal()
def uuu init uuu(self,parent=None):
超级(t1,自我).\uuuuu初始化\uuuuuuu(父级)
uic.loadUi(Controller.application\u path+r'\UI\t1.UI',self)
#此.ui文件有一个QTableWidget
self.tw_indi.setColumnCount(1)
self.tw_indi.setRowCount(1)
self.tw_indi.setItem(0,0,QTableWidgetItem(“*”))
self.tw_indi.itemDoubleClicked.connect(self.direcionar_detalhes)
def目录详细信息(自身、项目):
self.switch_window.emit()
t2级(QDialog):
开关\u窗口=PYQT信号(str)
def uuu init uuu(self,parent=None):
超级(t2,自我).\uuuu初始(父)
uic.loadUi(Controller.application\u path+r'\UI\t2.UI',self)
#此.ui文件与t1.ui文件相同,只是一些小的更改
类控制器():
控制器=无
#这是一个很好的选择
如果getattr(系统“冻结”,错误):
应用程序路径=sys.exec\u前缀
其他:
应用程序\路径=os.path.dirname(os.path.abspath(\文件\文件))
影视处=无
app=QApplication(sys.argv)
定义初始化(自):
Controller.Controller=self
self.mostra_carregamento()
sys.exit(Controller.app.exec)
def mostra_carregamento(自我):
self.view=t0()
self.view.switch\u window.connect(self.mostra\u indicator)
self.view.show()
def mostra_指示器(自身):
self.view.close()
self.view=t1()
self.view.switch\u window.connect(self.sinal\u指示器)
self.view.show()
def sinal_指示器(自身):
self.view.close()
self.view=t2()
self.view.show()
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
控制=控制器()
编辑2

以下是ui的链接:

问题不在于信号,但当您想将同一变量重新用于新窗口时,您正在消除该对象的内存,该对象仍然可见,因此正在运行,从而生成无保留的内存访问。解决方案是使用不同的变量名:

类控制器:
# ...
def mostra_carregamento(自我):
self.view0=t0()
self.view0.switch\u window.connect(self.mostra\u indicator)
self.view0.show()
def mostra_指示器(自身):
self.view0.close()
self.view1=t1()
self.view1.switch\u window.connect(self.sinal\u指示器)
self.view1.show()
def sinal_指示器(自身):
self.view1.close()
self.view2=t2()
self.view2.show()

问题不在于信号,而是当您想将同一变量重新用于新窗口时,您正在消除该对象仍然可见并因此运行的内存,从而生成无保留的内存访问。解决方案是使用不同的变量名:

类控制器:
# ...
def mostra_carregamento(自我):
self.view0=t0()
self.view0.switch\u window.connect(self.mostra\u indicator)
self.view0.show()
def mostra_指示器(自身):
self.view0.close()
self.view1=t1()
self.view1.switch\u window.connect(self.sinal\u指示器)
self.view1.show()
def sinal_指示器(自身):
self.view1.close()
self.view2=t2()
self.view2.show()

成功了!现在好点了吗?共享.ui的命令!我想就这些了,嗯?如果你提供的信息允许我执行你的代码,那么它就足够了,你如何验证它是否足够?创建一个新文件夹,创建仅包含您问题信息的文件,如果您可以重现原始问题,那么如果是MREDid问题,请执行此操作!现在好点了吗?共享.ui的命令!我想就这些了,嗯?如果你提供的信息允许我执行你的代码,那么它就足够了,你如何验证它是否足够?创建一个新文件夹,创建只包含你问题信息的文件,如果你能重现你原来的问题,那么如果它是一个MRE,就像一个魔咒!非常感谢你!通过