V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
yzs0126
V2EX  ›  问与答

求助大神~~~pyqt5 执行脚本将输出显示在 Mainwindow 的 textedit 控件中

  •  
  •   yzs0126 · 2019-02-27 19:45:48 +08:00 · 3621 次点击
    这是一个创建于 1894 天前的主题,其中的信息可能已经有所发展或是发生改变。

    pyqt5 开发的程序界面,主窗口上可以浏览打开和调用执行独立的脚本,现在想让脚本执行的结果输出显示在主窗口 textedit 中,一般脚本里信息输出都是用 print 直接打印,这样执行的结果在 python console 区域显示。我想让信息输出在主窗口的 textedit 中,那么我的脚本就得能调用主窗口上的 textedit 控件。 我的问题就是:独立的脚本怎么能够调用主窗口的 textedit 控件呢,对其进行操作?

    10 条回复    2019-03-01 10:38:11 +08:00
    ysc3839
        1
    ysc3839  
       2019-02-27 20:55:51 +08:00 via Android
    脚本是怎么执行的呢?如果是在新进程里执行的话可以用管道获取输出的内容。
    izoabr
        2
    izoabr  
       2019-02-28 00:04:21 +08:00   ❤️ 1
    用 popen 去执行程序,然后拿 stdout 回来,存变量里,再通过 setText 还是 setPlanText 设置文本就行。
    如果你希望实时回显的话,你可能需要线程和信号 emit
    yzs0126
        3
    yzs0126  
    OP
       2019-02-28 16:24:18 +08:00
    @izoabr 是 os.popen 还是 subprocess.Popen ?我试了 os.popen,相比 os.system,popen 操作可以返回的是一个 file 对象。我可以把这个 file 对象里的文本输出到 textedit,这个是你给的思路,我没理解错吧!
    但是在执行新脚本的时候,脚本里有 print 语句好像就报错,OSError [Errno 22]
    yzs0126
        4
    yzs0126  
    OP
       2019-02-28 16:27:24 +08:00
    @ysc3839 谢谢!你说的管道输出,是指通过 subprocess.Popen 建立新进程执行脚本吗,然后用 PIPE 获取输出吗?
    ysc3839
        5
    ysc3839  
       2019-02-28 16:36:55 +08:00   ❤️ 1
    @yzs0126 是的。
    yzs0126
        6
    yzs0126  
    OP
       2019-02-28 17:20:53 +08:00
    @ysc3839 非常感谢! 我用 subprocess.Popen 和 PIPE 获取到了脚本里 print 的内容 问题已解决
    yzs0126
        7
    yzs0126  
    OP
       2019-02-28 17:21:00 +08:00
    @izoabr 非常感谢! 我用 subprocess.Popen 和 PIPE 获取到了脚本里 print 的内容 问题已解决
    yzs0126
        8
    yzs0126  
    OP
       2019-02-28 17:23:30 +08:00
    @izoabr 其实你的建议对我帮助也很大,但是另外一个回复者的建议更直接有效,铜币比较少,我就拿来感谢他了,很抱歉!真的很感谢前辈的指教
    izoabr
        9
    izoabr  
       2019-02-28 17:53:08 +08:00
    @yzs0126 #8 解决了就好,铜币又不能花,一大堆都没用,不在乎那个,不用客气哦。
    yzs0126
        10
    yzs0126  
    OP
       2019-03-01 10:38:11 +08:00
    @izoabr 还想请教一个问题,subprocess.Popen 能给执行的脚本传入参数吗?想给这个脚本传入一个参数,参数是一个 handle,脚本里要调用这个 handle 实例进行操作。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2878 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 13:39 · PVG 21:39 · LAX 06:39 · JFK 09:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.