Python CSS的Qt错误处理

Python CSS的Qt错误处理,python,css,qt,error-handling,pyqt4,Python,Css,Qt,Error Handling,Pyqt4,我有一个应用程序,它根据用户输入编写自己的样式表。它通过用户选择更改各个小部件的背景颜色/图像 每当我开始使用这个功能时,一切都很完美。然而,事情最终还是停滞不前了。即使样式表不断添加到应用程序中并设置到应用程序中,也不会对窗口进行任何可视更改 由于在生成CSS时涉及到一些强大的字符串操作,我猜想CSS中存在一些错误,导致Qt无法解释所有内容 我看不出这个错误!我的CSS总是以 "#widget { 'correctly formatted properties';} #nextwidget..

我有一个应用程序,它根据用户输入编写自己的样式表。它通过用户选择更改各个小部件的背景颜色/图像

每当我开始使用这个功能时,一切都很完美。然而,事情最终还是停滞不前了。即使样式表不断添加到应用程序中并设置到应用程序中,也不会对窗口进行任何可视更改

由于在生成CSS时涉及到一些强大的字符串操作,我猜想CSS中存在一些错误,导致Qt无法解释所有内容

我看不出这个错误!我的CSS总是以

"#widget { 'correctly formatted properties';} #nextwidget..."
我知道一个事实(通过算法的限制和检查损坏的CSS文件),每个小部件的属性设置在语法上是正确的

但是我注意到这样做

#widget {color: ;}
。。。不会阻止Qt解释字符串的其余部分,但使用不存在的属性(例如:
{goose:2}
)会阻止Qt

那么,什么样的错误会被Qt排除,什么会停止对文件其余部分的解释呢?我在Qt文档中找不到列表或类似的内容。
(事实上,PyQt4包中甚至没有任何样式表文档。)

就我的CSS而言,我申请

 {color: x; background-image:, y, background-color: z }   
对于用户选择的每个小部件(x、y、z是正确的替代项)。
是否存在不支持这些属性的可见小部件?
(这可能是我问题的根源!)


我试着把SS放在一个验证器中,这里有两个导致错误的CSS片段,我不知道为什么

#centralwidget { color: #ffffff ;
                background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #aaff00, stop: 1 #aac300)  
                }
而且

#Display { background-image: url('+NewTextureFile+');
         background-repeat: repeat-xy; 
         }
如果有人也能帮上忙,我将非常感激
(很明显,我一直在改进进入CSS的方式…)

编辑: @Avaris:

对不起,这个坏掉的CSS不是最小的;我不知道哪部分坏了

我怀疑这是因为我没有用“;”完成所有属性

#tab{color: #000000 ;background-color: #ff0000    } #tab{color: #000000 ;background-image: url(E:/ChemCalc ULTIMATE/ChemCalc ULTIMATE/Texture Files/Penguins.jpg);background-repeat: repeat-xy;    } #Amount_Unit{color: #000000 ;background-color: #aaff00   } #Conc_Unit2{color: #000000 ;background-color: #aaff00   } #pushButton{color: #000000 ;background-color: #aaff00   } #tab_2{color: #000000 ;background-image: url(E:/ChemCalc ULTIMATE/ChemCalc ULTIMATE/Texture Files/Penguins.jpg);background-repeat: repeat-xy;  } #RMM_Output{color: #000000 ;background-color: #aaff00  } #Conc_Unit1{color: #000000 ;background-color: #aaff00  } #UnitText{color: #000000 ;;  } #Amount_Input{color: #000000 ;;  } #Concentration_Input{color: #000000 ;;  } #Amount_Output{color: #000000 ;;  } #Subshell_Element{color: #000000 ;background-color: #00aaff  } #Charge{color: #000000 ;background-color: #00aaff  } #Simple_Config{color: #000000 ;background-color: #00aaff  } #Actual_Config{color: #000000 ;background-color: #00aaff  } #Save_Simple_Button{color: #ffffff ;background-color: #aaff00  } #Save_Actual_Button{color: #ffffff ;background-color: #aaff00  } #pushButton_2{color: #ffffff ;background-color: #aaff00  } #centralwidget{color: #ffffff ;background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #aaff00, stop: 1 #aac300)  } #pushButton_3{color: #000000 ;background-color: #ff0000  } #Calculate_Proportions_Button{color: #000000 ;background-color: #f80000  } #{color: #000000 ;background-image: url(E:/ChemCalc ULTIMATE/ChemCalc ULTIMATE/Texture Files/Koala.jpg);background-repeat: repeat-xy;  } #tab_4{color: #000000 ;background-image: url(E:/ChemCalc ULTIMATE/ChemCalc ULTIMATE/Texture Files/Koala.jpg);background-repeat: repeat-xy;  }  #LayoutContainer1{color: #000000 ;background-image: url(E:/ChemCalc ULTIMATE/ChemCalc ULTIMATE/Texture Files/Koala.jpg);background-repeat: repeat-xy;  } #AmountInput{color: #ffaa00 ;background-color: #ffff00  } #tab_5{color: #000000 ;background-color: #ffffff  } #menubar{color: #000000 ;background-color: #ffffff  } #tabWidget{color: #000000 ;background-color: #ffffff  } #Reaction_Element_Holder{color: #000000 ;background-image: url(E:/ChemCalc ULTIMATE/ChemCalc ULTIMATE/Texture Files/Penguins.jpg);background-repeat: repeat-xy; } 
谢谢你的阅读


PyQt4
python 2.7.2

Windows 7

查看示例CSS,有一个
ID
选择器,没有名称:

#tab{color: #000000 ;background-color: #ff0000    } 
/* ... */
#{color: #000000 ;background-image: url(E:/ChemCalc ULTIMATE/ChemCalc ULTIMATE/Texture Files/Koala.jpg);background-repeat: repeat-xy;  } #
/* ... */
#Reaction_Element_Holder{color: #000000 ;background-image: url(E:/ChemCalc ULTIMATE/ChemCalc ULTIMATE/Texture Files/Penguins.jpg);background-repeat: repeat-xy; }
它抛出了解析器,并使该点之后的CSS的其余部分无效

作为补充,无名的
ID
选择器实际上是无效的CSS。W3C验证程序提供:

Parse Error  Lexical error at line 1, column 2. Encountered: "{" (123), after : "#"
用于:


但我测试的浏览器(Opera、Firefox)足够聪明,可以忽略并继续。显然,Qt CSS解析器对这种错误不太适应。

我已经确定我应该使用后台repeat:repeat而不是repeat xy,但是-xy起作用了!你能展示一个“坏掉的”CSS的例子吗(如果可能的话尽量少)?有两个例子被验证器认为坏掉了,尽管它们在QSS中工作得很好。我现在很难通过程序复制损坏的样式表!>:|“web”验证器有权投诉这些问题
QLinearGradient
是Qt内部
背景色的有效值,但Qt外部不是。至于
repeat xy
,没有
repeat xy
选项,您应该使用
repeat
(就像您发现的那样)。它是如何工作的?CSS解析器可能会忽略无效条目并使用默认值。
background repeat
的默认值是
repeat
(耶!:)。我很高兴你指出了问题所在。你发布的CSS示例有一个中间没有名字的id选择器(
{…}
)。这似乎打破了之后的事情(至少对我来说)。
#{ color: blue; }
body { color: red; }