2017-08-11 26 views
1

我已经看过PySide和QT文档,并且使用了搜索引擎优化功能,但还没有找到解决方案。Python/QT - 我能做些什么来获得系列组件之间的4个像素边界?

在这个Python 2.7/Qt4.8(PySide)示例中,我有一系列的小部件,它们通过CSS有4个px圆角边框。我试图做的是将这些小部件放在一起,并使小部件之间的边界与其他部分相同。就我而言,技术上,QT完全按照我的要求进行,但我需要一些特殊的东西,以便每个小部件之间有4 px边框,而不是8(4 x 2)。

这是我得到的。

enter image description here

这里是什么,我需要(Photoshop处理)

enter image description here

下面是示例代码。

from PySide.QtGui import * 
import sys 

css = ''' 
QLabel{ 
    border: 4px solid #555555; 
    border-radius: 6px; 
} 
''' 

class MainWidget(QWidget): 

    def __init__(self, parent=None): 
     super(MainWidget, self).__init__(parent) 
     self.setStyleSheet(css) 
     layout = QVBoxLayout(self) 
     layout.setSpacing(0) 

     for i in range(3): 
      label = QLabel('hello') 
      layout.addWidget(label) 

app = QApplication([]) 
win = MainWidget() 
win.show() 
sys.exit(app.exec_()) 

我试过根本就没有呈现底部边框顶部2的小部件,这让我的存在方式的一部分,但解决的办法是半可怕,不会工作。

我能做些什么来获得这些小部件之间的4 px边框?

+0

布局中的间距如何? – Trilarion

回答

2

您可以尝试调整页边距:

css = ''' 

QLabel{ 
    border: 4px solid #555555; 
    margin-top: -1; 
    margin-bottom: -1; 
    border-radius: 6px; 
} 
''' 

(我-2第一次尝试,但偏移会导致不良的影响)

编辑:

以下方式可以更准确地控制边距,而不会造成难看的裁剪:

css = ''' 
QLabel{ 
    border: 4px solid #555555; 
    border-radius: 6px; 

} 
*[nobottom="true"]{ 
    margin-bottom: -2;  

} 
*[notopnobottom="true"]{ 
    margin-top: -2; 
    margin-bottom: -2;  

} 
*[notop="true"]{ 
    margin-top: -2; 
} 
''' 

class MainWidget(QWidget): 

    def __init__(self, parent=None): 
     super(MainWidget, self).__init__(parent) 
     self.setStyleSheet(css) 
     layout = QVBoxLayout(self) 
     layout.setSpacing(0) 
     labeltop = QLabel('hello') 
     labeltop.setProperty('nobottom', True) 
     labelmid = QLabel('hello') 
     labelmid.setProperty('notopnobottom', True) 
     labelbottom = QLabel('hello') 
     labelbottom.setProperty('notop', True) 
     layout.addWidget(labeltop) 
     layout.addWidget(labelmid) 
     layout.addWidget(labelbottom) 
+0

差不多!圆角部分从CSS边距属性的裁剪效果略微切碎,我认为您在将所述属性设置为-2时注意到了这一点。 –

+0

@PaulW,您是如何在测试中选择2个顶级小部件的,是否有CSS选择器或您是否命名了小部件?一个问题的答案:p – PRMoureu

+0

@PRMourea,在Python中,我将setProperty('nonbottom',True)用于前2个小部件,然后在CSS中通过*选择所述小部件* [nonbottom =“true”] {bla bla bla ;}。 –

相关问题