QT4中的单选按钮和显示控件

1 投票
2 回答
953 浏览
提问于 2025-04-17 23:38

我有一个用旧式文本界面的脚本:我想用Python替换我的脚本代码,并使用qt designer工具和pyside创建一个图形用户界面。

我已经能够添加一个菜单栏、一个标签页和一些单选按钮。

当用户选择一个单选按钮时,我想在一个文本框里显示该选择的简要说明;当用户选择另一个单选按钮时,文本框里应该出现不同的说明,依此类推。

我有几个问题:

  1. 我应该用什么控件作为文本框?我在考虑用文本浏览器作为显示控件,但不太确定。用标签控件?还是用文本编辑控件?
  2. 当我把单选按钮连接到文本浏览器时,我能看到一些有趣的选项,比如insertHtml或insertPlainText,但一旦我选择了单选按钮的clicked()信号,这些选项就消失了,我甚至找不到它们了。
  3. 我也尝试把一个按钮和标签控件连接起来,但我找不到任何setText的选项。看文档我知道setText是存在的,但我在我的代码里无法使用它。

谢谢你们的任何支持。

2 个回答

0

在按钮点击后使用setText:

void myclass::on_mybutton_click()
{
    ui->mylabel->setText("My awesome text");
}

补充:这个答案是用C++写的,不过你可以很容易地把它转换成Python。这样你就能看到结构是怎样的。

0

Qt有几种内置的方式可以向用户展示帮助信息,所以在自己动手做之前,建议你先考虑一下这些现成的选项:

  • 如果你想给用户一个简单的提示,告诉他们某个界面元素是什么,可以使用工具提示
  • 如果你需要稍微长一点的提示,来解释某个界面元素能做什么,可以使用状态提示。这种提示通常用于菜单项和工具栏按钮。
  • 如果你需要提供更长、更详细的信息,可以使用“这是什么”模式。这些信息可以使用HTML格式,还可以包含指向主要帮助文档的链接。

下面的示例脚本展示了如何使用这些方法,并且还演示了如何在“这是什么”消息中处理链接:

from PyQt4 import QtCore, QtGui

class Window(QtGui.QMainWindow):
    def __init__(self):
        QtGui.QMainWindow.__init__(self)
        self.statusBar()
        self.toolbar = self.addToolBar('toolbar')
        action = QtGui.QWhatsThis.createAction(self)
        action.setStatusTip('Enter what\'s this mode')
        self.toolbar.addAction(action)
        widget = QtGui.QGroupBox(self)
        layout = QtGui.QVBoxLayout(widget)
        self.setCentralWidget(widget)
        for name in 'one two three four'.split():
            checkbox = QtGui.QCheckBox('Checkbox %s' % name, self)
            checkbox.setToolTip('Tooltip for checkbox %s' % name)
            checkbox.setWhatsThis("""
                <b>What\'s this text</b>:<br><br>
                Checkbox %s<br><br>
                <a href="url-%s">link to main help</a>
                """ % (name, name))
            checkbox.installEventFilter(self)
            layout.addWidget(checkbox)

    def eventFilter(self, source, event):
        if event.type() == QtCore.QEvent.WhatsThisClicked:
            print(event.href())
        return QtGui.QMainWindow.eventFilter(self, source, event)

if __name__ == '__main__':

    import sys
    app = QtGui.QApplication(sys.argv)
    window = Window()
    window.setGeometry(500, 300, 250, 200)
    window.show()
    sys.exit(app.exec_())

撰写回答