У меня есть пара радиокнопок на форме и 2 линейных входа.
Я хочу, чтобы в зависимости от выбранной опции был виден только один из этих входов.
Итак, каждый раз, когда пользователь нажимает, я устанавливаю видимость для обеих строк через
Функция setVisible ().
Он отлично работает в Windows, но в MacOS я вижу артефакты. За видимым линеедом я вижу «остатки» скрытого линееда:
![enter image description here](https://i.stack.imgur.com/kJyyX.png)
Есть ли какой-нибудь хак, чтобы исправить это на Mac OS?
PyQt версия 5
EDIT:
Согласно запросу ниже приведен пример для проверки. Запустите это в MacOS с python 3.
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QMainWindow
from PyQt5.QtWidgets import QApplication
import sys
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(800, 600)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.centralwidget)
self.verticalLayout_3.setObjectName("verticalLayout_3")
self.verticalLayout = QtWidgets.QVBoxLayout()
self.verticalLayout.setObjectName("verticalLayout")
self.radioButton = QtWidgets.QRadioButton(self.centralwidget)
self.radioButton.setObjectName("radioButton")
self.verticalLayout.addWidget(self.radioButton)
self.radioButton_2 = QtWidgets.QRadioButton(self.centralwidget)
self.radioButton_2.setObjectName("radioButton_2")
self.verticalLayout.addWidget(self.radioButton_2)
self.verticalLayout_3.addLayout(self.verticalLayout)
self.verticalLayout_2 = QtWidgets.QVBoxLayout()
self.verticalLayout_2.setObjectName("verticalLayout_2")
self.horizontalLayout = QtWidgets.QHBoxLayout()
self.horizontalLayout.setObjectName("horizontalLayout")
self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit.setVisible(False)
self.lineEdit.setObjectName("lineEdit")
self.lineEdit.setPlaceholderText("LineEdit 1")
self.horizontalLayout.addWidget(self.lineEdit)
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setVisible(False)
self.pushButton.setObjectName("pushButton")
self.horizontalLayout.addWidget(self.pushButton)
self.verticalLayout_2.addLayout(self.horizontalLayout)
self.lineEdit_2 = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit_2.setVisible(False)
self.lineEdit_2.setObjectName("lineEdit_2")
self.lineEdit_2.setPlaceholderText("LineEdit 2")
self.verticalLayout_2.addWidget(self.lineEdit_2)
self.verticalLayout_3.addLayout(self.verticalLayout_2)
spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.verticalLayout_3.addItem(spacerItem)
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 22))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.radioButton.setText(_translate("MainWindow", "Option 1"))
self.radioButton_2.setText(_translate("MainWindow", "Option 2"))
self.pushButton.setText(_translate("MainWindow", "PushButton"))
class App:
def __init__(self):
self.app = QApplication(sys.argv)
self.window = QMainWindow()
self.ui = Ui_MainWindow()
self.ui.setupUi(self.window)
self.ui.radioButton.clicked.connect(self.update_visibility)
self.ui.radioButton_2.clicked.connect(self.update_visibility)
def update_visibility(self):
self.ui.lineEdit.setVisible(self.ui.radioButton.isChecked())
self.ui.lineEdit_2.setVisible(self.ui.radioButton_2.isChecked())
def exec(self):
self.window.show()
sys.exit(self.app.exec_())
def main():
a = App()
a.exec()
if __name__ == "__main__":
main()