python - Python PyQt4 中的对齐按钮

标签 python user-interface pyqt4

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

我有以下两个问题

enter image description here

  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()

最佳答案

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

    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")
    <b>vBox_left.addWidget(Button_input1)</b>

    Button_input2 = QtGui.QPushButton("Segmented Polygons")
    <b>vBox_left.addWidget(Button_input2)</b>

    Button_output = QtGui.QPushButton("Save")
    <b>vBox_left.addWidget(Button_output)</b>

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

    <b>vBox_left.addWidget(Button_input1)</b>
    <b>vBox_left.addWidget(Button_input2)</b>
    <b>vBox_left.addWidget(Button_output)</b>
    vBox_left.addWidget(Button_start)

此外,这四个按钮已经添加到QVBoxLayout vBox_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属性(property)。请参阅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)

关于python - Python PyQt4 中的对齐按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15366661/

相关文章:

python - firefox webdriver for selenium on debian issue

python - 使用 Python 读取 YAML 文件导致 AttributeError

python - 如何使用 python-pptx 更改形状内的字体颜色?

c++ - QGraphicsDropShadowEffect 仅适用于 ui 上的一项,尽管我到处都使用它

ajax - UI眼睛糖果何时适合在网络应用中使用?

windows - 使用 pyqt4 正确处理 Windows 操作系统缩放

qt - 在 QTreeView (Qt/PySide/PyQt) 中实现自动换行的委托(delegate)?

python - 关于正则表达式的查询

css - 在运行时更改滚动 Pane 的缩略图颜色

internationalization - 使用 gettext 代替 QObject.tr() 进行 PyQt4 应用程序本地化的优缺点?