Прежде всего, вы должны никогда редактировать файлы, созданные с помощью pyuic
. Они предназначены для использования только в качестве импортируемого модуля. Узнайте больше о , используя Designer , чтобы понять, как правильно их использовать.
Второе: если вам нужен ввод от пользователя из другого окна, вы должны использовать QDialog , не QMainWindow.
Тогда, если вам нужно только простое входное значение, используйте QInputDialog , возможно, из одного из его методов stati c, в вашем случае getInt()
будет достаточно.
Наконец, причина, по которой ваш код не работает, заключается в том, что после создания и отображения окна вы сразу получаете значение x
, но после этого функция немедленно возвращается, так как нет ничего, что "блокировало бы" это (таким образом это не будет ждать любого ввода от пользователя). Вот для чего нужны QDialogs: они ждут от пользователя ввода перед возвратом.
Если у вас больше нет файлов .ui, создайте их заново, а затем снова сгенерируйте файлы python с помощью pyui c и оставьте их там .
Предположим, что вы создали файл с именем ui_mainwindow.py
для основного окна и ui_inpudialog.py
для диалога со спинбоксом ( не * 1031) * редактирование строки, так как вам нужно числовое значение c) и кнопка:
from PyQt5 import QtWidgets
from ui_mainwindow import Ui_MainWindow
from ui_inputdialog import Ui_Dialog
class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self):
super().__init__()
self.setupUi(self)
self.pushButton.clicked.connect(self.get_value)
def get_value(self):
dialog = InputDialog(self)
# this will show the dialog and wait for the user to accept or reject it
if dialog.exec():
# get the value from the dialog
self.label.setText(str(dialog.getValue()))
class InputDialog(QtWidgets.QDialog, Ui_Dialog):
def __init__(self, parent=None):
super().__init__(parent)
self.setupUi(self)
def getValue(self):
# return the current value of the spinbox
return self.spinBox.value()
В качестве альтернативы, если вам не требуется заданная c настройка диалогового окна ввода, просто используйте QInputDialog как предложил раньше:
from PyQt5 import QtWidgets
from ui_mainwindow import Ui_MainWindow
class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self):
super().__init__()
self.setupUi(self)
self.pushButton.clicked.connect(self.get_value)
def get_value(self):
length = QtWidgets.QInputDialog.getInt(self, 'Insert value', 'Value',
min=0, max=100)
self.label.setText(str(length))