【问题标题】:alignment buttons in PyQt4 of PythonPython PyQt4 中的对齐按钮
【发布时间】:2013-03-12 16:23:28
【问题描述】:

这是我第一个使用 PyQt4 的应用程序。

我有以下两个问题

  1. 左侧框中的按钮。它们的间距不同。

  2. 单选按钮是否可以使用斜体? (即,Ke 等人。 而不是 Ke 等人)?

导入系统 从 PyQt4 导入 QtGui,QtCore

class MainWindow(QtGui.QMainWindow):
    def __init__(self):
        QtGui.QMainWindow.__init__(self)
        # title of the window
        self.setWindowTitle('Segmentation Accuracy')
        # fix window size
        self.setFixedSize(400,200)
        # status bar with initial message
        self.statusBar().showMessage('ready')


        # Layout
        # contiene gli altri widget
        cWidget = QtGui.QWidget(self)
        grid = QtGui.QGridLayout(cWidget) 


        # Box Left
        vBox_left = QtGui.QVBoxLayout()
        vBox_left.setSpacing(2) #set spacing

        Button_input1 = QtGui.QPushButton("Reference Polygons")
        vBox_left.addWidget(Button_input1)

        Button_input2 = QtGui.QPushButton("Segmented Polygons")
        vBox_left.addWidget(Button_input2)

        Button_output = QtGui.QPushButton("Save")
        vBox_left.addWidget(Button_output)

        Button_start = QtGui.QPushButton("Start")
        Button_start.setCheckable(True)

        vBox_left.addWidget(Button_input1)
        vBox_left.addWidget(Button_input2)
        vBox_left.addWidget(Button_output)
        vBox_left.addWidget(Button_start)

        # Box right
        vBox_rigth = QtGui.QVBoxLayout()
        vBox_rigth.setSpacing(10) #set spacing
        ke = QtGui.QRadioButton("Ke et al.", cWidget)
        pu = QtGui.QRadioButton("Pu et al.", cWidget)
        clinton = QtGui.QRadioButton("Clinton et al.", cWidget)
        ke.setChecked(True)
        vBox_rigth.addWidget(ke)
        vBox_rigth.addWidget(pu)
        vBox_rigth.addWidget(clinton)

        ke.setStatusTip("Ke et al., 2010. Remote Sensing of Environment, 114, pp. 1141-1154")
        pu.setStatusTip("Pu et al., 2012. Remote Sensing of Environment, 124, pp. 516-533")
        clinton.setStatusTip("Clinton et al., 2012. Remote Sensing of Environment, 124, pp. 516-533")

        grid.addWidget(Button_input1, 0, 0)
        grid.addWidget(Button_input2, 1, 0)
        grid.addWidget(Button_output, 2, 0)
        grid.addWidget(Button_start, 3, 0)
        grid.addLayout(vBox_left, 0, 0)
        grid.addLayout(vBox_rigth, 0, 1)


        cWidget.setLayout(grid)
        self.setCentralWidget(cWidget)

def main():
    app = QtGui.QApplication(sys.argv)
    main = MainWindow()
    main.show()
    sys.exit(app.exec_())

main()

【问题讨论】:

    标签: python user-interface pyqt4


    【解决方案1】:

    您使用了QGridLayout 并将Button_input1 放入单元格(0,0) 并将包含三个raido 按钮的布局vBox_rigth 放入单元格(0,1)。它们被调整到相同的高度。这就是为什么您的四个按钮的间距不同的原因。

        grid = QtGui.QGridLayout(cWidget)
        ......
        grid.addWidget(Button_input1, 0, 0)
        ......
        grid.addLayout(vBox_rigth, 0, 1)
    

    您不应使用addWidget 将这些按钮添加到vBox_left 两次。

    
        Button_input1 = QtGui.QPushButton("Reference Polygons")
        vBox_left.addWidget(Button_input1)
    
        Button_input2 = QtGui.QPushButton("Segmented Polygons")
        vBox_left.addWidget(Button_input2)
    
        Button_output = QtGui.QPushButton("Save")
        vBox_left.addWidget(Button_output)
    
        Button_start = QtGui.QPushButton("Start")
        Button_start.setCheckable(True)
    
        vBox_left.addWidget(Button_input1)
        vBox_left.addWidget(Button_input2)
        vBox_left.addWidget(Button_output)
        vBox_left.addWidget(Button_start)
    

    另外,这四个按钮已经添加到QVBoxLayoutvBox_left,那么你不应该将它们添加到grid

        grid.addWidget(Button_input1, 0, 0)
        grid.addWidget(Button_input2, 1, 0)
        grid.addWidget(Button_output, 2, 0)
        grid.addWidget(Button_start, 3, 0)
    

    小部件可以使用斜体。您只需要更改font 属性。见http://doc.qt.digia.com/stable/qwidget.html#font-prop
    例如:

        ke = QtGui.QRadioButton("Ke et al.", cWidget)
        font = QtGui.QFont("Times", 10)
        font.setItalic(True)
        ke.setFont(font)
    

    您还可以使用QLabel 来显示富文本。例如:

        ke_label = QtGui.QLabel("Ke <i>et al</i>.")
    

    因此,最终的__init__ 可能是

        def __init__(self):
            QtGui.QMainWindow.__init__(self)
            # title of the window
            self.setWindowTitle('Segmentation Accuracy')
            # fix window size
            self.setFixedSize(400,200)
            # status bar with initial message
            self.statusBar().showMessage('ready')
    
    
            # Layout
            # contiene gli altri widget
            cWidget = QtGui.QWidget(self)
            grid = QtGui.QGridLayout(cWidget)
    
            # Box Left
            vBox_left = QtGui.QVBoxLayout()
            vBox_left.setSpacing(2) #set spacing
    
            Button_input1 = QtGui.QPushButton("Reference Polygons")
            vBox_left.addWidget(Button_input1)
    
            Button_input2 = QtGui.QPushButton("Segmented Polygons")
            vBox_left.addWidget(Button_input2)
    
            Button_output = QtGui.QPushButton("Save")
            vBox_left.addWidget(Button_output)
    
            Button_start = QtGui.QPushButton("Start")
            Button_start.setCheckable(True)
    
            # vBox_left.addWidget(Button_input1)
            # vBox_left.addWidget(Button_input2)
            # vBox_left.addWidget(Button_output)
            vBox_left.addWidget(Button_start)
    
            # Box right
            vBox_right = QtGui.QVBoxLayout()
            vBox_right.setSpacing(10) #set spacing
    
            ke = QtGui.QRadioButton("", cWidget)
            pu = QtGui.QRadioButton("", cWidget)
            clinton = QtGui.QRadioButton("", cWidget)
            ke.setChecked(True)
    
            ke_label = QtGui.QLabel("Ke <i>et al</i>.", cWidget)
            pu_label = QtGui.QLabel("Pu et al.", cWidget)
            clinton_label = QtGui.QLabel("Clinton et al.", cWidget)
    
            grid_right = QtGui.QGridLayout()
    
            grid_right.addWidget(ke, 0, 0)
            grid_right.addWidget(pu, 1, 0)
            grid_right.addWidget(clinton, 2, 0)
            grid_right.addWidget(ke_label, 0, 1)
            grid_right.addWidget(pu_label, 1, 1)
            grid_right.addWidget(clinton_label, 2, 1)
            grid.addLayout(grid_right, 0, 1)
    
            grid.setColumnStretch(0, 1)
            grid.setColumnStretch(1, 1)
            grid_right.setColumnStretch(1, 1)
    
            ke.setStatusTip("Ke et al., 2010. Remote Sensing of Environment, 114, pp. 1141-1154")
            pu.setStatusTip("Pu et al., 2012. Remote Sensing of Environment, 124, pp. 516-533")
            clinton.setStatusTip("Clinton et al., 2012. Remote Sensing of Environment, 124, pp. 516-533")
    
    
            ke_label.setStatusTip("Ke et al., 2010. Remote Sensing of Environment, 114, pp. 1141-1154")
            pu_label.setStatusTip("Pu et al., 2012. Remote Sensing of Environment, 124, pp. 516-533")
            clinton_label.setStatusTip("Clinton et al., 2012. Remote Sensing of Environment, 124, pp. 516-533")
    
            # grid.addWidget(Button_input1, 0, 0)
            # grid.addWidget(Button_input2, 1, 0)
            # grid.addWidget(Button_output, 2, 0)
            # grid.addWidget(Button_start, 3, 0)
            grid.addLayout(vBox_left, 0, 0)
            #grid.addLayout(vBox_right, 0, 1)
    
    
            # cWidget.setLayout(grid)
            self.setCentralWidget(cWidget)
    

    【讨论】:

    • @Gianni,你可以使用QLabel。例如,label = QtGui.QLabel("Ke&lt;i&gt; et al.&lt;/i&gt;")
    • sorry nymk,我不明白在我的代码中插入 label = QtGui.QLabel("Ke et al.") 的位置
    • @Gianni,您可以将单选按钮替换为 QHBoxLayout,其中包含带有空白文本的 QRadioButtonQLabel,或者使用 QGridLayout 包含单选按钮和标签。我更新了我的帖子。我用QGridLayout
    猜你喜欢
    • 1970-01-01
    • 2015-04-06
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 2017-07-26
    • 2012-06-23
    • 1970-01-01
    • 2013-04-11
    相关资源
    最近更新 更多