以下是我的应用程序中的第二个窗口,第一个窗口中的按钮全部正常工作,代码几乎相同。当我从窗口1启动它或单独启动它时,第二个窗口中的按钮不起作用。
import sys
import os
from PyQt5.QtWidgets import QMainWindow, QApplication
from PyQt5 import uic
import qdarkstyle
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
qtCreatorFile = "PATH TO MY .ui FILE"
Ui_error, QtBaseClass = uic.loadUiType(qtCreatorFile) #process through pyuic
class MyApp1(QMainWindow, Ui_error): #gui class
def __init__(self,label_txt):
#The following sets up the gui via Qt
super(MyApp1, self).__init__()
self.ui = Ui_error()
self.ui.setupUi(self)
#set up callbacks
self.ui.label.setText(label_txt)
self.ui.label.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
self.ui.label.setAlignment(Qt.AlignCenter)
self.ui.b_err.clicked.connect(self.close_w)
#This button doesn't work
# Tried to use self.close directly in clicked.connect()(which worked in window 1) but also doesn't work
# Tried to use @staticmethod but didn't work
def close_w(self):
print('tst') # tst is not printed in console when button is clicked
self.close()
def errorGUI(label_txt):
app = QApplication(sys.argv)
###
app.setStyleSheet(qdarkstyle.load_stylesheet_pyqt5()) # Issue was caused by the stylesheet
###
window = MyApp1(label_txt)
window.show()
sys.exit(app.exec_())
if __name__ == "__main__":
errorGUI("Error Msg")
编辑: 在尝试了一些不同的解决方案之后,我决定创建一个使用相同代码的新窗口,唯一的区别是没有文本传递给新窗口。在此新创建的窗口上,按钮起作用。我认为按钮问题来自将字符串“ Error Msg”(存储在变量label_txt中)传递给窗口。
Edit2:
.ui文件:
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>error</class>
<widget class="QMainWindow" name="error">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>493</width>
<height>210</height>
</rect>
</property>
<property name="windowTitle">
<string>Error</string>
</property>
<widget class="QWidget" name="centralwidget">
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<widget class="QLabel" name="label">
<property name="enabled">
<bool>true</bool>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="font">
<font>
<pointsize>41</pointsize>
</font>
</property>
<property name="text">
<string>Placeholder Button</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QPushButton" name="b_err">
<property name="font">
<font>
<pointsize>16</pointsize>
</font>
</property>
<property name="text">
<string>Close</string>
</property>
</widget>
</item>
</layout>
</widget>
<widget class="QMenuBar" name="menubar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>493</width>
<height>22</height>
</rect>
</property>
</widget>
<widget class="QStatusBar" name="statusbar"/>
</widget>
<resources/>
<connections/>
</ui>
编辑3:
当我删除样式表时,它可以工作。这很奇怪,因为所有其他窗口/按钮都可以与样式表一起使用
答案 0 :(得分:0)
问题与我使用的样式表有关。将我的PyQt5降级到5.14版可以解决此问题。 @musicamante非常感谢您在这里的帮助!