鱼C论坛

 找回密码
 立即注册
查看: 1994|回复: 3

pywebview出错

[复制链接]
发表于 2021-6-26 14:52:43 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
想要用pywebview+flask做一个小demo,代码如下:
  1. import flask
  2. import webview

  3. app = flask.Flask(__name__)


  4. @app.route('/')
  5. def home_page():
  6.     return flask.render_template('index.html')


  7. @app.route('/admin/', methods=['GET', 'POST'])
  8. def hello_admin():
  9.     if flask.request.form['password'] == '229773fxy':
  10.         return "welcome, admin!"
  11.     else:
  12.         return "warning, wrong password, please check your password again"

  13. if __name__ == '__main__':
  14.     window = webview.create_window(
  15.         title='demo',
  16.         url=app,               
  17.         confirm_close=True
  18.     )
  19.     cn = {
  20.         'global.quitConfirmation': u'确定关闭?'
  21.     }
  22.     webview.start(localization=cn, gui='mshtml')
复制代码

index.html内容如下:
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.     <meta charset="UTF-8">
  5.     <title>Title</title>
  6. </head>
  7. <body>
  8.         <form action="http://127.0.0.1:5000/admin/" method="post">
  9.                 <p>Enter Password:</p>
  10.                 <input type="password" name="password" />
  11.                 <br>
  12.                 <input type="submit" value="done"/>
  13.         </form>
  14. </body>
  15. </html>
复制代码

但当我按下“done”按钮后,显示无法访问此页面(也就是https://127.0.0.1:5000/admin/这个网址)
我自己的想法是,可能flask服务没有开启,所以无法访问
但如果在代码中加上app.run(__name__)时,主进程被阻塞,gui界面没有出现
我想使用multiprocessing把flask服务放到另一个进程运行,结果失败了:
  1. Traceback (most recent call last):
  2.   File "first_flask.py", line 22, in <module>
  3.     Process(target=
  4.   File "D:\anaconda3\lib\multiprocessing\process.py", line 121, in start
  5.     self._popen = self._Popen(self)
  6.   File "D:\anaconda3\lib\multiprocessing\context.py", line 224, in _Popen
  7.     return _default_context.get_context().Process._Popen(process_obj)
  8.   File "D:\anaconda3\lib\multiprocessing\context.py", line 327, in _Popen
  9.     return Popen(process_obj)
  10.   File "D:\anaconda3\lib\multiprocessing\popen_spawn_win32.py", line 93, in __init__
  11.     reduction.dump(process_obj, to_child)
  12.   File "D:\anaconda3\lib\multiprocessing\reduction.py", line 60, in dump
  13.     ForkingPickler(file, protocol).dump(obj)
  14. TypeError: cannot pickle '_thread.lock' object

  15. (base) E:\coding file\MyPythonProjects\Flask\001test>Traceback (most recent call last):
  16.   File "<string>", line 1, in <module>
  17.   File "D:\anaconda3\lib\multiprocessing\spawn.py", line 116, in spawn_main
  18.     exitcode = _main(fd, parent_sentinel)
  19.   File "D:\anaconda3\lib\multiprocessing\spawn.py", line 126, in _main
  20.     self = reduction.pickle.load(from_parent)
  21. EOFError: Ran out of input
复制代码

实在没办法,有没有人知不知道如何解决?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-6-27 08:48:16 | 显示全部楼层
  1. url=app,         
复制代码

你确定这句该这么写吗

人家要url 你把服务器对象给传进去了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-7-5 16:03:25 | 显示全部楼层
nahongyan1997 发表于 2021-6-27 08:48
你确定这句该这么写吗

人家要url 你把服务器对象给传进去了

可是官方文档也允许这么做啊:

url - URL to load. If the URL does not have a protocol prefix, it is resolved as a path relative to the application entry point. Alternatively a WSGI server object can be passed to start a local web server.

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-7 13:09:49 | 显示全部楼层
你的代码在我这里运行正常
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-12 23:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表