【问题标题】:send keystrokes from unicode string pyqt pyside从 unicode 字符串 pyqt pyside 发送击键
【发布时间】:2016-02-18 22:26:30
【问题描述】:

我需要在 pyqt4 或 pyside 中模拟击键,我已经有了以下代码,但它只添加了大写拉丁字母,不允许使用小写字母或其他语言字母

def sendkeys(self, char, modifier=QtCore.Qt.NoModifier):
    event = QtGui.QKeyEvent(QtCore.QEvent.KeyPress, char, modifier)
    QtCore.QCoreApplication.postEvent(self, event)

def sendstring(self, string):
    for chara in string:
        print(chara)
        self.sendkeys(char=QtGui.QKeySequence.fromString(str(chara))[0])

这是一个完整的例子,可以让这个想法与拉丁字母一起工作

from PySide import QtCore, QtGui, QtWebKit


class WebPage(QtWebKit.QWebPage):
    """
    QWebPage that prints Javascript errors.
    """

def javaScriptConsoleMessage(self, message, lineNumber, sourceID):
    print('Javascript error at line number %d' % lineNumber)
    print('%s' % message)
    print('Source ID: %s' % sourceID)


class myWindow(QtWebKit.QWebView):
    def __init__(self, parent=None):
        super(myWindow, self).__init__(parent)
        self.loadFinished.connect(self.on_loadFinished)
        self.runloadfinished = True
        self.web_page = WebPage()
        self.setPage(self.web_page)
        self.load(QtCore.QUrl('http://stackoverflow.com/'))
def on_loadFinished(self):
    if self.runloadfinished:
        self.sendkeys(QtCore.Qt.Key_Tab)
        self.sendstring('Hello World')
        self.sendkeys(QtCore.Qt.Key_Enter)
        self.sendkeys(QtCore.Qt.Key_Return)
        self.runloadfinished = False

def sendkeys(self, char, modifier=QtCore.Qt.NoModifier):
    event = QtGui.QKeyEvent(QtCore.QEvent.KeyPress, char, modifier)
    QtCore.QCoreApplication.postEvent(self, event)

def sendstring(self, string):
    for chara in string:
        print(chara)
        self.sendkeys(char=QtGui.QKeySequence.fromString(str(chara))[0])


if __name__ == "__main__":
    import sys

    app = QtGui.QApplication(sys.argv)
    app.setApplicationName('myWindow')
    main = myWindow()
    main.show()
    sys.exit(app.exec_())

【问题讨论】:

    标签: python pyqt pyside qkeyevent qkeysequence


    【解决方案1】:

    对于将来需要答案的任何人,我已经在 upwork.com 上雇用了一个人并得到了答案,这是一个完整的工作示例,它适用于 python 2 和 3、pyqt 和 pyside

    # -*- coding: utf-8 -*-
    
    from PySide import QtCore, QtGui, QtWebKit
    
    
    class WebPage(QtWebKit.QWebPage):
        """
        QWebPage that prints Javascript errors.
        """
    
        def javaScriptConsoleMessage(self, message, lineNumber, sourceID):
            print('Javascript error at line number %d' % lineNumber)
            print('%s' % message)
            print('Source ID: %s' % sourceID)
    
    
    class myWindow(QtWebKit.QWebView):
        def __init__(self, parent=None):
            super(myWindow, self).__init__(parent)
            self.loadFinished.connect(self.on_loadFinished)
            self.runloadfinished = True
            self.web_page = WebPage()
            self.setPage(self.web_page)
            self.load(QtCore.QUrl('http://stackoverflow.com/'))
    
        def on_loadFinished(self):
            if self.runloadfinished:
                self.sendkeys(QtCore.Qt.Key_Tab)
                self.sendstring("لا اله الا الله ")
                #self.sendstring("Hello World")
                self.sendkeys(QtCore.Qt.Key_Enter)
                self.sendkeys(QtCore.Qt.Key_Return)
                self.runloadfinished = False
    
        def sendkeys(self, char, modifier=QtCore.Qt.NoModifier, text=None):
            if not text:
                event = QtGui.QKeyEvent(QtCore.QEvent.KeyPress, char, modifier)
            else:
                event = QtGui.QKeyEvent(QtCore.QEvent.KeyPress, char, modifier, text)
            QtCore.QCoreApplication.postEvent(self, event)
    
        def sendstring(self, string):
            for chara in string:
                print(chara)
    
                # QtCore.QString() is missing when using PyQt4 for Python3
                # since str() is unicode by default on Python3
                # http://inputvalidation.blogspot.in/2010/10/python3-pyqt4-and-missing-qstring.html
                try:
                    text = QtCore.QString(chara)
                except AttributeError:
                    text = str(chara)
    
                self.sendkeys(char=QtGui.QKeySequence.fromString(str(chara))[0],
                              text=text)
    
    
    if __name__ == "__main__":
        import sys
    
        app = QtGui.QApplication(sys.argv)
        app.setApplicationName('myWindow')
    
        main = myWindow()
        main.show()
    
        sys.exit(app.exec_())
    

    【讨论】:

      【解决方案2】:

      没有深入研究。我会寻找一种方法来限制你的 Unicode 设置为严格的 ASCII 说 128...

      [chr(x) for x in range(128)] --> 显示值..

      【讨论】:

      • 我试图通过 100 或更多,但我得到了空字符串,你可以通过调用 self.sendkeys(100) 来尝试我的代码,看看你会得到什么
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-23
      • 1970-01-01
      • 1970-01-01
      • 2011-12-23
      • 1970-01-01
      相关资源
      最近更新 更多