V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  ec0  ›  全部回复第 2 页 / 共 2 页
回复总数  35
1  2  
2022-03-27 16:04:18 +08:00
回复了 miaoge520 创建的主题 Python ImportError: No module named Crypto.Cipher 这个怎么解决?救救孩子吧
我试了一下
直接安装 pycryptodome , 运行 from Crypto.Cipher import AES 成功
然后安装 pycrypto , 运行 from Crypto.Cipher import AES 报错
然后卸载 pycrypto , 运行 from Crypto.Cipher import AES 报错
然后卸载 pycryptodome 再安装 pycryptodome , 运行 from Crypto.Cipher import AES 成功

建议卸载 pycrypto 和 pycryptodome ,再安装 pycryptodome
2022-03-25 19:49:49 +08:00
回复了 songdg 创建的主题 Python 修改 pytables 表格里的行的问题
name = tb.StringCol(256, pos=0)
price = tb.Float32Col(pos=1)
debut = tb.Time32Col(pos=2)
...
2022-03-21 22:04:08 +08:00
回复了 zictos 创建的主题 Python 如何防止选中命令行工具上的文字时导致 print()阻塞?
把 128 改成 439 可以使 input 函数正常返回
2022-03-21 21:48:54 +08:00
回复了 zictos 创建的主题 Python 如何防止选中命令行工具上的文字时导致 print()阻塞?
但是上述代码好像会使 input 函数无法返回
2022-03-21 21:41:22 +08:00
回复了 zictos 创建的主题 Python 如何防止选中命令行工具上的文字时导致 print()阻塞?
import ctypes

kernel32 = ctypes.windll.kernel32
kernel32.SetConsoleMode(kernel32.GetStdHandle(-10), 128)

代码来自
https://stackoverflow.com/questions/37500076/how-to-enable-windows-console-quickedit-mode-from-python
子线程自己退出,退出前发送 event

比如在 count 函数中

if CUR_NUMBER == 4:
(缩进)errorEvent = Event("error", CUR_NUMBER, type_=EVENT_TYPE_2)
(缩进)self._event_manager.sendEvent(errorEvent)
(缩进)return

也就是说 event 只是传递消息,线程的终结交给子线程自己
我找到了这段代码,可以批量 disable TButton,更通用一些,改造一下 if 语句可以 disable 其他类型的控件,不过不是所有控件都有 state 属性的

for child in gui.winfo_children():
(缩进)if child.winfo_class() == 'TButton':
(缩进)(缩进)child['state'] = 'disabled'
是啊,很麻烦,不过你可以给 button 取有序的名字,比如 button0,button1,然后
for i in range(n):
(缩进)getattr(gui, "button"+str(i))["state"] = "disabled"

批量 disable 按钮
button["state"] = "disabled" # 按钮不可点击
button["state"] = "normal" # 按钮可以点击

比如,你可以在之前的 Thread(target=es.count).start() 前面加上
self.button["state"] = "disabled"

在 class EventSource 的 count 函数 for 语句的后面加上
for i in range(self._max_number):
...
gui.button["state"] = "normal"
默认情况下 daemon=False
这样当你的窗口关闭时,UI 线程关闭了,但是 event_manager 里面的线程还在运行,程序没有关闭
你可以试试:运行程序,关闭窗口,但是在任务管理器里面可以看到 python 还在运行,只是没有显示窗口
daemon=True 时,主线程关闭,daemon 线程也会关闭
我改了 2 个地方

1. class event_manager 里面的 __init__
从 self._thread = Thread(target=self.Run)
改成 self._thread = Thread(target=self.Run, daemon=True)

2. class GUIListener 里面的 button_function
从 es.count()
改成 Thread(target=es.count).start()

count 被 UI 线程调用,而 count 里面有 sleep,不要在 UI 线程写 sleep,另外开一个线程
2019-05-28 16:41:40 +08:00
回复了 leegoo 创建的主题 Python Python scrapy yield 无法获取到返回内容
UserNameInput 和 PasswordInput 需要加密以后的值,不能是 xx
PageDF = PageDF[:-1]
2019-05-16 10:44:09 +08:00
回复了 qazwsxkevin 创建的主题 Python pandas 如何使用已成了 str 的 html 代码?
read_html() function can accept an HTML string/file/URL

read_html 可以接收 string
2019-05-14 13:42:47 +08:00
回复了 chinesehuazhou 创建的主题 Python 6 个相似问题求个合理的分析
事实 1:locals() dict 是局部变量空间的拷贝, 不等于 局部变量空间

猜想 1:exec('y = 1 + 1') 相当于 locals()['y'] = 2

猜想 2 : 调用 locals() 会刷新对应的 dict 对象(与局部变量空间同步),把定义并赋值的局部变量加入 locals() dict,把定义但未赋值的局部变量从 locals() dict 中清除

例 5:
print(locals()) 第二次调用了 locals() ,根据猜想 2,locals() dict 和局部变量空间同步,而局部变量空间里,y 已经定义但是没有赋值,locals() dict 会清除 y,所以 KeyError

例 4:
boc = locals() 调用 locals() ,locals()['y'] = 2 后,没有再次调用 locals() ,locals()['y'] 得以保留

例 3:
locals()['y'] = 2 之后调用了 locals() ,locals () dict 刷新,KeyError

例 2:
y = 1+1,y 已定义并赋值,locals() dict 有 key y,输出 2

例 1:
locals()['y'] = 2 后,y = locals()['y'] 调用了 locals() ,刷新 locals() dict,KeyError

例 0:
locals()['y'] = 2 后执行 z = locals()['y'] ,调用了 locals() ,刷新 locals() dict,刷新以后仍然可以输出 2,所以有了猜想 3

猜想 3:在刷新 locals() dict 时,如果一个 key 不是局部变量,那么刷新时得以保留


参考:
[为什么 Python 里面的 locals()是只读的]( https://zhuanlan.zhihu.com/p/21815224)
1  2  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   930 人在线   最高记录 6543   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 30ms · UTC 22:03 · PVG 06:03 · LAX 15:03 · JFK 18:03
Developed with CodeLauncher
♥ Do have faith in what you're doing.