【问题标题】:setText() doesn't really work PythonsetText() 并不真正适用于 Python
【发布时间】:2012-06-09 19:07:57
【问题描述】:
import sys
from PyQt4 import QtCore,QtGui
from Windows.intro_win import Ui_Introduction
from Windows.post_adder_win import Ui_postTool
import win32clipboard
import pyHook

class Intro(QtGui.QMainWindow):
    def __init__(self,parent=None):
        QtGui.QWidget.__init__(self,parent)
        self.ui = Ui_Introduction()
        self.ui.setupUi(self)
class postTool(QtGui.QMainWindow):
    def __init__(self,parent=None):
        QtGui.QWidget.__init__(self,parent)
        self.ui2 = Ui_postTool()
        self.ui2.setupUi(self)
    def setModPosition(self):
        self.ui2.lineEdit_2.setText("something")
        print "nomnom"


def OnKeyboardEvent(event):
    KeyClicked = event.KeyID
    if KeyClicked == 121:
        print "Debug from keyboardEvent"
        OMD_post.show()
        postTool().setModPosition()

if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    OMD_intro = Intro()
    OMD_post = postTool()
    OMD_intro.show()
    eventkey = pyHook.HookManager()
    eventkey.KeyDown = OnKeyboardEvent
    eventkey.HookKeyboard()
    sys.exit(app.exec_())

它真的不起作用 - 文本没有改变 - 为什么它不起作用?它没有给我任何错误(但 print 打印它应该打印的内容) https://dl.dropbox.com/u/21125662/compilation/_00398.jpg

【问题讨论】:

  • 你好像不是在打电话给setModPosition()
  • 是的,我通过 onkeyboardevent 完成,它打印调试“nomnom”,我忘了提。
  • 啊,我没看到。您是否检查过任何其他插槽是否正常工作,例如 setMaxLength()selectAll()
  • 我不使用任何其他插槽进行此输入,如果需要,这是我的代码dl.dropbox.com/u/21125662/compilation/post_adder_win.py

标签: python input label pyqt4 settext


【解决方案1】:

postTool().setModPosition() in OnKeyboardEvent 更改了 新创建的 postTool 的 lineEdit 中的文本,因为您没有 show() 新小部件,所以您不会看到该文本。您可能想要做的是在OMD_post 上致电setText

尝试将OnKeyBoardEvent 模块级函数替换为postTool 中的keyPressEvent 函数,或者使用QShortCut。

class postTool(QtGui.QMainWindow):
    def __init__(self,parent=None):
        QtGui.QWidget.__init__(self,parent)
        self.ui2 = Ui_postTool()
        self.ui2.setupUi(self)
    def setModPosition(self):
        self.ui2.lineEdit_2.setText("something")
        print "nomnom"
    def keyPressEvent(event):
        if type(event) == QtGui.QKeyEvent:
            key = str(event.text()).lower()
            if key == 'whatever':
                self.setModPosition()

或者,

class postTool(QtGui.QMainWindow):
    def __init__(self,parent=None):
        ... # the existing stuff
        QtGui.QShortcut(QtGui.QKeySequence("F10"), self, self.setModPosition)

【讨论】:

  • 问题是当我使用QT键事件时,当没有选择窗口时它不起作用(我的意思是如果我在其他程序中使用键),当我点击F10时显示小部件(又名键盘事件),然后它调用 postTool() 中的更改文本
  • @Marcin:对。您是否尝试过将postTool().setModPosition() 更改为OMD_post.setModPosition()?在我看来,OMD_post 不应该在OnKeyBoardEvent 的范围内,但是因为您已经在上面的行中使用了OMD_post..
  • /me 愚蠢,/me 愚蠢(大约 9000 次愚蠢之后),它在更改为 OMD_post THANKS 后工作,但我真的不知道为什么当我没有工作时它不起作用t 使用 OMD_post (它是从 postTool [debug was working] 调用方法)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-29
  • 1970-01-01
  • 1970-01-01
  • 2017-05-30
  • 2021-06-24
相关资源
最近更新 更多