用黑色突出显示选中的项目,用绿色突出显示已选中的项目

时间:2019-06-24 05:11:33

标签: python pyqt pyqt5 python-3.7

我无法突出显示菜单栏中的所选项目。我在代码版本中遇到问题。我只想用黑色突出显示当前选中的项目,并用绿色突出显示已选中的项目。在我的界面中突出显示名为Rice的图像。

我尝试添加此代码,但是由于出现更多错误,我仅获得了先前版本的代码。

import sys
from PyQt5 import QtGui, QtCore, QtWidgets

count = 0
width,height=1300,700
oneUnit = (width+height)/100

class Main(QtWidgets.QMainWindow):
    def __init__(self):
        QtWidgets.QMainWindow.__init__(self)
        self.initUI()

    def initUI(self):
        # ---------Window settings --------------------------------
        self.width,self.height = 1300,700
        # //for using in full screen
        # width = mainWindow.frameGeometry().width()
        # height = mainWindow.frameGeometry().height()
        self.setGeometry(0, 0,width,height)
        self.setWindowTitle("Interface")
        #---------content that are displayed in window
        self.centralwidget = QtWidgets.QWidget()
        self.userInfoArea = QtWidgets.QScrollArea(self.centralwidget)
        self.userInfoArea.setGeometry(QtCore.QRect(1, 1, width*.7 -2, 
      height*.15 -2))
        self.mainRight = QtWidgets.QScrollArea(self.centralwidget)
        self.mainRight.setGeometry(QtCore.QRect(width*.7, 1, width*.3 -2 , 
      height-2))
        self.billingArea = QtWidgets.QScrollArea(self.centralwidget)
        self.billingArea.setGeometry(QtCore.QRect(width*.7 , height*.15, 
      width*.3 -2, height*.65 -2))
        self.mainArea = QtWidgets.QScrollArea(self.centralwidget)
        self.mainArea.setGeometry(QtCore.QRect(1, height*.15 +1, width*.7 -2, 
      height*.85 -2))
        self.tabWidget = QtWidgets.QTabWidget(self.centralwidget)
        self.tabWidget.setGeometry(QtCore.QRect(1, height*.15 +1, width*.7 
    -3, 
    height*.85 -3))
        self.lunchTab = QtWidgets.QWidget()
        self.lunchTab.setObjectName("lunchTab")
        self.tabWidget.addTab(self.lunchTab, "Lunch/Snacks")
        self.drinkTab = QtWidgets.QWidget()
        self.drinkTab.setObjectName("drinkTab")
        self.tabWidget.addTab(self.drinkTab, "Drinks")


        self.paybillBtn = QtWidgets.QPushButton("Pay Bill",self.mainRight)
        self.showBtn(self.paybillBtn,self.mainRight,.65,.815,100,100)
        #showingImage function contains images arranged in grid format
        self.showingImage()

        self.add = QtWidgets.QPushButton("Add",self.mainRight)
        self.add.clicked.connect(self.Add)
        self.add.setObjectName("add_button")
        self.add.price = "Rs. 80"
        self.add.quantity = 0
        '''
        button = self.mainRight.findChildren(QtWidgets.QPushButton)
        print("list")
        print(button[1].setObjectName("changed"))
        print("lsit finis  ")
        '''
        self.grid = QtWidgets.QVBoxLayout(self.billingArea)
        self.grid.setGeometry(QtCore.QRect(150, 240, 350, 440))

        self.verticalLayoutWidget = QtWidgets.QWidget(self.billingArea)
        self.verticalLayoutWidget.setGeometry(QtCore.QRect(5,5, 380, 440))
        self.verticalLayoutWidget.setObjectName("verticalLayoutWidget")
        self.verticalLayout_2 = 
      QtWidgets.QVBoxLayout(self.verticalLayoutWidget)
        self.verticalLayout_2.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout_2.setObjectName("verticalLayout_2")

        self.setCentralWidget(self.centralwidget)
        self.show()

    def showBtn(self,obj,frame,xPos,yPos,width,height):
        mainR_width,mainR_height = 
    frame.frameGeometry().width(),frame.frameGeometry().height()
         obj.setGeometry(QtCore.QRect(mainR_width*xPos, mainR_height*yPos, 
    width, height))

    def Add(self):
        global count
        source = self.sender()
        source.quantity += 1
        frame = QtWidgets.QFrame(self.verticalLayoutWidget)
        frame.setGeometry(QtCore.QRect(0, 0, 369, 39))
        frame.setFrameShape(QtWidgets.QFrame.Box)
        frame.setFrameShadow(QtWidgets.QFrame.Plain)
        frame.setObjectName("frame")
        minusButton = QtWidgets.QPushButton("-",frame)
        minusButton.setGeometry(QtCore.QRect(160, 10, 21, 23))
        minusButton.setObjectName("minusButton")
        plusButton = QtWidgets.QPushButton("+",frame)
        plusButton.setGeometry(QtCore.QRect(210, 10, 21, 23))
        plusButton.setObjectName("plusButton")
        deleteButton = QtWidgets.QPushButton("x",frame)
        deleteButton.setGeometry(QtCore.QRect(330, 10, 21, 23))
        deleteButton.setObjectName("deleteButton")
        foodLabel = QtWidgets.QLabel(str(source.objectName()),frame)
        foodLabel.setGeometry(QtCore.QRect(20, 10, 100, 13))
        foodLabel.setObjectName("foodLabel")
        priceLabel = QtWidgets.QLabel(str(source.price),frame)
        priceLabel.setGeometry(QtCore.QRect(280, 10, 47, 13))
        priceLabel.setObjectName("priceLabel")
        quantityLabel = QtWidgets.QLabel(str(source.quantity),frame)
        quantityLabel.setGeometry(QtCore.QRect(190, 10, 16, 16))
        quantityLabel.setObjectName("quantityLabel")

        '''
        frames = self.verticalLayoutWidget.findChildren(QtWidgets.QFrame)
        print("frames",frames,"frames")
        for frame in frames:
            labels = frame.findChildren(QtWidgets.Qlabel)
            print(labels)
            for label in labels:
                if label.text() == source.objectName():
                    print("something")
        '''

        self.verticalLayout_2.addWidget(frame)
        count += 1

    def Button(self):
        sender = self.sender()
        print(sender.text())

    def showingImage(self):
        imgWi,imgHi=self.width*.12,self.height*.2
        imgX, imgY = oneUnit, 2*oneUnit
        self.image1 = QtWidgets.QPushButton("Rice Set", self.lunchTab)
        self.image1.setGeometry(QtCore.QRect(imgX , imgY, imgWi,imgHi))
        self.image1.setObjectName("Rice Set")
        self.image1.price = "Rs. 80"
        self.image1.quantity = 0
        self.image1.clicked.connect(self.Add)
        imgX = imgX + imgWi + oneUnit

        self.image2 = QtWidgets.QPushButton("Curd", self.lunchTab)
        self.image2.setGeometry(QtCore.QRect(imgX , imgY, imgWi,imgHi))
        self.image2.setObjectName("Curd")
        self.image2.price = "Rs. 25"
        self.image2.quantity = 0
        self.image2.clicked.connect(self.Add)
        imgX = imgX + imgWi + oneUnit

        self.image3 = QtWidgets.QPushButton("image3", self.lunchTab)
        self.image3.setGeometry(QtCore.QRect(imgX , imgY, imgWi,imgHi))
        imgX = imgX + imgWi + oneUnit

        self.image4 = QtWidgets.QPushButton("image4", self.lunchTab)
        self.image4.setGeometry(QtCore.QRect(imgX , imgY, imgWi,imgHi))
        imgX = imgX + imgWi + oneUnit

        self.image5 = QtWidgets.QPushButton("image5", self.lunchTab)
        self.image5.setGeometry(QtCore.QRect(imgX , imgY, imgWi,imgHi))
        imgX = oneUnit
        imgY = imgY + imgHi + oneUnit*5

        self.image6 = QtWidgets.QPushButton("image6", self.lunchTab)
        self.image6.setGeometry(QtCore.QRect(imgX , imgY, imgWi,imgHi))

if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    main = Main()
    main.show()
    sys.exit(app.exec_())

我希望选中的项目突出显示。

1 个答案:

答案 0 :(得分:0)

只是为了很好地理解,您需要更改已经选择为绿色的按钮的颜色和当前选择为黑色的按钮? 您可以为此使用CSS。单击对象时更改其名称。例如:

#element_selected {
background-color:green;
}

#current_element {
background-color:black;
}

感谢:

def setCSS(self,css_filename):
        css = open(css_filename,'r')
        self.setStyleSheet(css.read())

您将能够在您的主窗口中添加CSS。此外,如果使用此方法,则在更改一个按钮的对象名称后,需要刷新CSS。这就是为什么使用此方法很有用!