2017-12-27 1 views
0

저는 Python 3.5와 PySide 1.2.2가있는 리눅스 박스 (Ubuntu 16.04)를 사용하고 있습니다.PySide를 사용하여 여러 QPushButton에 체크 가능한 스타일 시트 속성을 적용하려면 어떻게해야합니까?

체크 할 수없는 QPushButton이 있고 스타일 시트를 한 번만 설정하면 단추가 원하는 모양으로 나타납니다. 그러나 내가 체크 할 수있게 만들면, Qt는 초점을 맞춘 스타일과 unfocused 스타일로 플레이하고 싶어합니다.

#!/usr/bin/env python3 
# -*- coding: utf-8 -*- 

import sys 
import os 

from PySide.QtCore import * 
from PySide.QtGui import * 

class UI(QDialog): 

    def __init__(self, *args, **kwargs): 
     super(UI, self).__init__(**kwargs) 

     outerBox = QGroupBox(self) 
     outerBox.setGeometry(50, 50, 200, 150) 
     outerBox.setObjectName("outerBox") 

     brokenCss = "QPushButton:unchecked {" 
     brokenCss += " background-color: #ce9a9a;" # red-ish 
     brokenCss += " border: 1px outset #000000;" 
     brokenCss += " border-radius: 6px;" 
     brokenCss += "}" 
     brokenCss += "QPushButton:checked {" 
     brokenCss += " background-color: #12f785;" # green-ish 
     brokenCss += " border: 1px inset #000000;" 
     brokenCss += " border-radius: 6px;" 
     brokenCss += "}" 

     broken = [] 
     for i in range(2): 
      broken.append(QPushButton(outerBox)) 
      broken[i].setObjectName("broken{0}".format(i)) 
      broken[i].setGeometry(15, (35 * (i + 1)), 100, 20) 
      broken[i].setText("Broken CSS {0}".format(i)) 
      broken[i].setCheckable(True) 
      broken[i].setChecked(False) 
      broken[i].setStyleSheet(brokenCss) 


if __name__ == '__main__': 
    app = QApplication(sys.argv) 
    ui = UI() 
    ui.showFullScreen() 
    sys.exit(app.exec_()) 

나는 위의 녹색으로 틱 설정하고 그들이 한 번 누르면 한 번 녹색 틱 유지 (그리고 클릭하면 빨간색 틱 다시 플립 것이다, 시작시 두 개의 빨간 틱 버튼을 생산하는 것입니다 기대했다 다시). 대신에 나는 참조 :

A focused button and an unfocused button

그들은 모두 그들이 각각 녹색으로 클릭되면,하지만 가장 최근에 클릭 약간 어두운 초점을 나타내는 것 같아요. 그러나 두 개의 빨간 버튼 대신에 다시 위의 이미지를 보여줍니다.

나는 :default, :flat 및 기타 여러 가지 의사 상태에 대해 CSS "스탠자"를 추가하려고 시도했지만 모두 사용할 수 없습니다.

+0

위의 버전에 오타가 있었지만 (내가 가진 "="내가해야 어디 "+ =") 문제가 아니었다. – Ubuntourist

답변

0

분명히 문서가 현실과 일치하지 않습니다. uncheckedchecked은 내가 원하는대로 문서화 된 방법 이었지만, offon을 똑같이 효과적이지 않은 것으로 실험 한 후에 closedopen을 시도했다. 설명서에서 알 수 있듯이 메뉴가 첨부 된 QPushButtons에만 적용될 예정이다. . 그럼에도 효과가있었습니다. (outsetinset을 수행하는 것처럼 보이지는 않지만 색상이 올바르게 표시됩니다.)

또한 PyQt5로 전환하여 변경이 있는지 확인했지만 PySide와 동일하게 동작했습니다.

#!/usr/bin/env python3 
# -*- coding: utf-8 -*- 

import sys 
import os 

from PySide.QtCore import * 
from PySide.QtGui import * 

class UI(QDialog): 

    def __init__(self, *args, **kwargs): 
     super(UI, self).__init__(**kwargs) 

     outerBox = QGroupBox(self) 
     outerBox.setGeometry(50, 50, 200, 150) 
     outerBox.setObjectName("outerBox") 

     brokenCss = "QPushButton:closed {" 
     brokenCss += " background-color: #ce9a9a;" # red-ish 
     brokenCss += " border: 1px outset #000000;" 
     brokenCss += " border-radius: 6px;" 
     brokenCss += "}" 
     brokenCss += "QPushButton:open {" 
     brokenCss += " background-color: #12f785;" # green-ish 
     brokenCss += " border: 1px inset #000000;" 
     brokenCss += " border-radius: 6px;" 
     brokenCss += "}" 

     broken = [] 
     for i in range(2): 
      broken.append(QPushButton(outerBox)) 
      broken[i].setObjectName("broken{0}".format(i)) 
      broken[i].setGeometry(15, (35 * (i + 1)), 100, 20) 
      broken[i].setText("Broken CSS {0}".format(i)) 
      broken[i].setCheckable(True) 
      broken[i].setChecked(False) 
      broken[i].setStyleSheet(brokenCss) 


if __name__ == '__main__': 
    app = QApplication(sys.argv) 
    ui = UI() 
    ui.showFullScreen() 
    sys.exit(app.exec_()) 
관련 문제