Прежде всего, не используйте список в качестве имени переменной, поскольку это зарезервированное слово, и это считается плохой практикой, которая в будущем может вызвать проблемы.
С другой стороны accept()
- это метод, который закрывает окно и выдает код возврата QDialog.Accepted
, но вы перезаписываете его и не позволяете ему выполнять свою работу, поэтому после выполнения вашей логики вы должны вызвать метод родителя, чтобы выполнить его обычное закрытиеи установите код возврата.
С другой стороны, рекомендуется, чтобы имена классов начинались с заглавных букв, прочитайте PEP8 для получения дополнительной информации.С другой стороны, я рекомендую научиться использовать макеты для определения положения элемента.
from PyQt5 import QtCore, QtWidgets
class Select_variable_window(QtWidgets.QDialog):
def __init__(self, items, parent=None):
super().__init__(parent)
lay = QtWidgets.QVBoxLayout(self)
label = QtWidgets.QLabel("Select Variable for Scatterplot:")
self.variablelist = QtWidgets.QListWidget()
self.variablelist.setSelectionMode(QtWidgets.QAbstractItemView.SingleSelection)
self.variablelist.addItems(items)
dialogbutton = QtWidgets.QDialogButtonBox()
dialogbutton.setOrientation(QtCore.Qt.Horizontal)
dialogbutton.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel|QtWidgets.QDialogButtonBox.Ok)
lay.addWidget(label)
lay.addWidget(self.variablelist)
lay.addWidget(dialogbutton)
dialogbutton.accepted.connect(self.accept)
dialogbutton.rejected.connect(self.reject)
def accept(self):
self.scattervariable = [item.text() for item in self.variablelist.selectedItems()]
super().accept() # <-- call parent method
class FirstWidget(QtWidgets.QWidget):
def __init__(self, parent=None):
super().__init__(parent)
lay = QtWidgets.QVBoxLayout(self)
button = QtWidgets.QPushButton("Open Dialog")
button.clicked.connect(self.on_clicked)
lay.addWidget(button)
@QtCore.pyqtSlot()
def on_clicked(self):
w = Select_variable_window(["1", "2", "3", "4"])
if w.exec_() == QtWidgets.QDialog.Accepted:
print(w.scattervariable)
if __name__ == '__main__':
import sys
app = QtWidgets.QApplication(sys.argv)
w = FirstWidget()
w.show()
sys.exit(app.exec_())