#python #pyqt #pyqt5
#python #pyqt #pyqt5
Вопрос:
У меня есть эти два скрипта на python, которые я хочу объединить в одном окне. По сути, добавление виджета в окно при отмеченной кнопке. это главное окно
from PyQt5 import QtCore, QtGui, QtWidgets
class MainWindow(object):
def setupUi(self, Form):
Form.setObjectName("Form")
Form.resize(400, 300)
self.checkBox = QtWidgets.QCheckBox(Form)
self.checkBox.setGeometry(QtCore.QRect(40, 40, 171, 21))
self.checkBox.setObjectName("checkBox")
// when checkbox is true add widget
self.retranslateUi(Form)
QtCore.QMetaObject.connectSlotsByName(Form)
def retranslateUi(self, Form):
_translate = QtCore.QCoreApplication.translate
Form.setWindowTitle(_translate("Form", "Form"))
self.checkBox.setText(_translate("Form", "render frame range"))
это виджет, который я хочу добавить
class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName("Form")
Form.resize(400, 300)
self.lineEdit = QtWidgets.QLineEdit(Form)
self.lineEdit.setGeometry(QtCore.QRect(20, 120, 113, 20))
self.lineEdit.setObjectName("lineEdit")
self.lineEdit_2 = QtWidgets.QLineEdit(Form)
self.lineEdit_2.setGeometry(QtCore.QRect(200, 120, 113, 20))
self.lineEdit_2.setObjectName("lineEdit_2")
self.label = QtWidgets.QLabel(Form)
self.label.setGeometry(QtCore.QRect(140, 120, 47, 13))
self.label.setObjectName("label")
self.pushButton = QtWidgets.QPushButton(Form)
self.pushButton.setGeometry(QtCore.QRect(30, 160, 131, 31))
self.pushButton.setObjectName("pushButton")
self.retranslateUi(Form)
QtCore.QMetaObject.connectSlotsByName(Form)
def retranslateUi(self, Form):
_translate = QtCore.QCoreApplication.translate
Form.setWindowTitle(_translate("Form", "Form"))
self.label.setText(_translate("Form", "to"))
self.pushButton.setText(_translate("Form", "Render Sequence"))
Я знаю, что мне нужно создать родительский виджет для главного окна, но я не знаю как. Когда флажок установлен, я хочу, чтобы виджет был добавлен. Если флажок установлен в значение false, я хочу, чтобы виджет был удален. Я видел примеры с c , но не с python. Если кто-нибудь может мне помочь или указать правильное направление, это было бы здорово.
Ответ №1:
Вам не нужно добавлять / удалять виджет. Вы можете просто скрыть или показать его в соответствии с состоянием вашего флажка.
Подключите сигнал QCheckBox::clicked
к слоту QWidget::setVisible
:
class MainWindow(QWidget):
def __init__(self, parent=None, **kwargs):
super(MainWindow, self).__init__(parent, **kwargs)
self.resize(400, 300)
self.checkBox = QCheckBox("Hide/show", self)
self.checkBox.setGeometry(QRect(40, 40, 171, 21))
self.widgetToManage = QLabel("Hello world!", self)
self.widgetToManage.hide() # the checkbox is unchecked by default.
# When the checkbox is checked, the widget is visible.
self.checkBox.clicked.connect(self.widgetToManage.setVisible)
if __name__ == '__main__':
app = QApplication(sys.argv)
window = MainWindow()
app.setActiveWindow(window)
window.show()
sys.exit(app.exec_())
Комментарии:
1. Ошибка типа: setVisible() принимает ровно один аргумент (задано 0)
2. Я заставил его работать с show вместо setVisible self.viewport2RenderChBox.clicked.connect (self.widgetToManage.show)