![](/img/trans.png)
[英]Single window mode with the ability to open multiple dialogs at once in PyQt5?
[英]PyQt5: Change layout for multiple objects at once
好的,所以我有一個QMainWindow對象,它是我的窗口,其中包含幾個QLineEdit對象。 根據條件,單個QLineEdit對象可以更改其顏色(顏色:如果有錯誤,則為紅色)。 我試圖找到一種方法,當按下按鈕時,將所有 QLineEdit對象的顏色重置為黑色(默認)。 現在,我將它們全部放在一個列表中並對其進行遍歷,這效率不高,因為我有約60個QLineEdit對象。
我正在尋找一種可以一次全局更改窗口中所有QLineEdit對象的樣式表的方法。
Ui_MainWindow是由Qt Designer自動生成並導入的類。 我對類MainWindow進行了所有更改,而不是Qt Desginer告訴我的Ui_MainWindow。
from PyQt5.QtWidgets import QMainWindow
from Windows.main_window import Ui_MainWindow
class MainWindow(QMainWindow, Ui_MainWindow):
def __init__(self):
super(QMainWindow, self).__init__()
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
# Input validation
self.ui.lineEdit.textChanged.connect(lambda: self.validate(self.ui.lineEdit))
self.ui.lineEdit_2.textChanged.connect(lambda: self.validate(self.ui.lineEdit_2))
self.ui.lineEdit_3.textChanged.connect(lambda: self.validate(self.ui.lineEdit_3))
# Open file button
self.ui.pushButton_Open.clicked.connect(self.open_file_dialog)
self.show()
# If text meets a condition, paint it red
def validate(self, element):
if element.text() == 'foo':
element.setStyleSheet('color: rgb(255,0,0)')
def open_file_dialog(self):
self.reset_stylesheet()
...
def reset_stylesheet(self):
ui_elements = [self.ui.lineEdit, self.ui.lineEdit_2, self.ui.lineEdit_3]
for element in ui_elements:
element.setStyleSheet('color: rgb(0,0,0)')
您可以嘗試類似的方法,但是我不確定它會快多少。
我將連接方法更改為line.textChanged.connect(self.validate)
盡管您可以在validate
使用element.setProperty
將其更改回
將前兩行添加到__init__
方法中。
self.setStyleSheet('QLineEdit[validated=true]{color: rgb(255,0,0)}')
self.lineEdits = (x for x in self.centralWidget().children()
if isinstance(x, QLineEdit))
# If text meets a condition, paint it red
def validate(self, element):
if element == 'foo':
self.sender().setProperty('validated',True)
else:
self.sender().setProperty('validated',False)
self.sender().setStyle(self.style())
def invalidate(self, element):
element.setProperty('validated', False)
element.setStyle(element.style())
return element
def open_file_dialog(self):
self.reset_stylesheet()
def reset_stylesheet(self):
tuple(map(self.invalidate, self.lineEdits))
或者您可以添加
reset_stylesheet()
函數中的self.setStyleSheet('QLineEdit{color:#FFF};')
和
驗證部分中的self.setStyleSheet('QLineEdit{color:#F00};')
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.