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

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

你可以更新数据库某一个字段来间接监控另一个程序,
比如把 pythonrun 字段设置为 1 , vc 设置为 0 ,当 vc 俩次或者三秒监测字段为 0 ,认为 py 程序不运行

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/318842

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX