我正在使用Python和PySide开发Qt应用程序。
该应用程序可在Ubuntu Linux上运行;机器配有触摸屏。

虚拟键盘“板载”用于让用户输入文本。默认情况下它是隐藏的。一旦应用程序中的文本字段(如gedit)获得焦点,它将自动触发虚拟键盘并显示出来。

但是,在我的应用程序中,我有一个QInputDialog,要求用户提供一些输入。就我而言,聚焦QInputDialog的文本字段不会触发虚拟键盘显示。我该如何实现?

最佳答案

按照板载的README公开DBUS服务,以允许应用程序切换其可见性。

您可能想要通过在getText调用之前和之后添加类似内容来实现此目的。例如。

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(如herehere所示)或使用类似的方法(通过使用DBUS或某些其他消息传递解决方案(TCP套接字等),以切换该特定虚拟键盘的状态。

关于python - 如何使QInputDialog触发虚拟键盘显示?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28874365/

10-13 04:09