如何使QInputDialog触发虚拟键盘显示?

时间:2015-03-05 09:32:57

标签: python qt touch pyside

我正在用Python和PySide开发一个Qt应用程序。 该应用程序在Ubuntu Linux上运行;这台机器有一个触摸屏。

虚拟键盘'onboard'用于让用户输入文字。默认情况下它是隐藏的。一旦像 gedit 这样的应用程序中的文本字段获得焦点,它就会自动触发虚拟键盘并显示出来。

但是,在我的应用程序中,我有一个QInputDialog,它要求用户输入一些内容。在我的例子中,聚焦QInputDialog的文本字段不会触发虚拟键盘显示。我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:3)

根据板载README公开DBUS服务,允许应用程序切换其可见性。

您可能希望通过添加getText调用之前和之后的内容来实现此目的。 E.g。

msg = QtDBus.QDBusMessage.createMethodCall('org.onboard.Onboard', '/org/onboard/Onboard/Keyboard','org.onboard.Onboard.Keyboard'
                'org.onboard.Onboard.Keyboard.Show')
QtDBus.QDBusConnection.sessionBus().send(msg)
text, ok = QtGui.QInputDialog.getText(self, 'Input Dialog', 
            'Enter your name:')
msg2 = QtDBus.QDBusMessage.createMethodCall('org.onboard.Onboard', '/org/onboard/Onboard/Keyboard','org.onboard.Onboard.Keyboard'
                'org.onboard.Onboard.Keyboard.Hide')
QtDBus.QDBusConnection.sessionBus().send(msg2)

您也可以对两个调用使用ToggleVisible方法。

这是特定于板载的,因为任何虚拟键盘解决方案的一般显示已经使用现有的ibus或malitt输入法引擎集成到QT中,或者通过实现QPlatformInputContext来完成,如所示here和{ {3}}或者使用类似的方法使用DBUS或其他一些消息传递解决方案(TCP套接字等)来切换特定虚拟键盘的状态。