V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
omg21
V2EX  ›  Python

借助 VB 充当 GUI 调用 python,两者之间通信的思考

  •  
  •   omg21 · 2016-11-07 23:10:00 +08:00 · 7115 次点击
    这是一个创建于 2956 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我现在用利用 VB 来做 python 的 GUI ,之所以不用 Tkinter 是因为这货太麻烦了,还有就是对 VB 感情很深。。。
    但是现在遇到个问题,两者之间的沟通出现了点麻烦。
    我现在是用 VB 外部调用 py 来处理数据,然后把结果显示到 VB 的界面中,沟通的介质是数据库, VB 把需要处理的内容存到表中, py 处理表中的内容,把结果也存到表中,完事以后 VB 再从表中读取展现。流程就是这样。
    我在 VB 端做了个 true 循环,直到表中有内容时才退出循环,显示结果,但是现在的情况,如果 py 在处理过程中报错, VB 端读不到数据,一直就在那等于死循环了。
    我的想法是,给现有 py 端容易出错的地方全加上 try ,出错时把错误代码传到表中, VB 端在循环中读这两个表,读出哪个有内容就做哪个处理。
    需要加 try 的地方有好多,还有的函数套函数套了好几层,加了太多的 try 真是破坏了代码的可读性,除此以外,还有其他 的方法吗?
    11 条回复    2016-11-09 00:01:50 +08:00
    lishunan246
        1
    lishunan246  
       2016-11-07 23:20:07 +08:00
    感觉用本地 socket 通信更合适
    zhuangzhuang1988
        2
    zhuangzhuang1988  
       2016-11-07 23:36:21 +08:00
    try ??
    你需要学习 Monad
    Option/Either 是解决方法。
    stamaimer
        3
    stamaimer  
       2016-11-07 23:38:39 +08:00 via iPhone
    pyqt
    dant
        4
    dant  
       2016-11-07 23:39:00 +08:00
    你需要的是一整套 RPC 方案。
    嗯这样一来你会发现 tkinter 更简洁(
    corvofeng
        5
    corvofeng  
       2016-11-08 07:15:38 +08:00 via Android
    pyqt 不就可以做图形界面, 还跨平台呢
    adooo
        6
    adooo  
       2016-11-08 09:13:02 +08:00
    这样:你用 vb 直接调用 py ,方法应该很多,比如调用系统命令。
    之后, py 执行,执行前给数据库表的某个字段一个状态码,有了结果后修改状态码,如果报错,再存入另一个状态码。
    这样的话,你的 vb 就先只取状态码,根据状态码,返回对应的信息
    wizardoz
        7
    wizardoz  
       2016-11-08 12:42:13 +08:00
    pyqt 正解,或者 wxWidgets 的 py 绑定。
    如果 VB 支持 zmq 的话也可以用 VB + zmq + py 。如果不能用消息队列通信,只能用 socket 或者共享内存的话基本不要想。你会发现你完成这个程序花费的精力都可以学会 QT 了。
    omg21
        8
    omg21  
    OP
       2016-11-08 13:07:33 +08:00
    @zhuangzhuang1988 你说的 Monad ,是针对我提问的哪方面?
    是指 “需要加 try 的地方有好多,还有的函数套函数套了好几层,加了太多的 try 真是破坏了代码的可读性” 这个吗?
    Monad 我是第一次听说,粗略的看了下,好像就是用若干小函数搭建一个程序,但是我现在就是这样用的啊。
    omg21
        9
    omg21  
    OP
       2016-11-08 13:09:13 +08:00
    @adooo 对对,现在暂时就用这个方法。
    zhuangzhuang1988
        10
    zhuangzhuang1988  
       2016-11-08 13:10:25 +08:00
    @omg21 是的
    qile1
        11
    qile1  
       2016-11-09 00:01:50 +08:00 via Android
    我用 python 多线程建了一个循环读文本的程序,两个线程不好通讯,就建立了一个 lock.lock 的文件,当读取文件的时候就建立此文件,另一个进程监测这个文件,如果有就删除此文件!

    你可以更新数据库某一个字段来间接监控另一个程序,
    比如把 pythonrun 字段设置为 1 , vc 设置为 0 ,当 vc 俩次或者三秒监测字段为 0 ,认为 py 程序不运行
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3118 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 04:55 · PVG 12:55 · LAX 20:55 · JFK 23:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.