【问题标题】:radio button and display widgets on designer-qt4Designer-qt4 上的单选按钮和显示小部件
【发布时间】:2014-03-24 11:22:17
【问题描述】:

我有一个带有旧的基于文本的用户界面的 shell 脚本:我想用 python 替换我的 shell 代码并使用 qt 设计器工具和 pyside 创建一个图形用户界面。

我能够添加一个菜单栏、一个选项卡和一些单选按钮。

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

我的问题是:

  1. 我应该使用什么小部件作为文本框?我在想文字 浏览器作为显示小部件,但我不确定。一个标签 ?文本编辑?
  2. 当我将单选按钮连接到文本浏览器时,我可以看到一些 文本浏览器下有趣的插槽,例如 insertHtml 或 insertPlainText,但只要我选择了信号 clicked() 单选按钮它们消失了,我什至找不到它们 再次。
  3. 我还尝试将按钮与标签小部件连接起来,但我 找不到任何类型的 setText 插槽。阅读文档 我知道 setText 存在,但我不能在我的代码中使用它。

感谢您的任何支持。

【问题讨论】:

    标签: python qt pyside


    【解决方案1】:

    Qt 有几个不同的内置 API 用于向用户显示帮助消息,因此我建议您在尝试推出自己的解决方案之前考虑这些:

    • 对于描述 GUI 元素是什么的简单消息,您可以设置tooltip
    • 对于描述 GUI 元素作用的稍长消息,您可以设置status tip。这些最常用于菜单项和工具栏按钮。
    • 要获得更长、更多信息的消息,您可以使用what's this mode。这些消息可以使用html formatting,还可以包含指向主要帮助的链接。

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

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

    【讨论】:

      【解决方案2】:

      点击按钮后使用 setText :

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

      编辑:这个答案是用 C++ 编写的,但您可以轻松地将其转换为 python。只是为了你有结构。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-04
        • 1970-01-01
        • 2017-10-11
        • 1970-01-01
        • 1970-01-01
        • 2013-12-09
        相关资源
        最近更新 更多