为什么说 Python 不适合做带 UI 的程序? kivy 不是很强大吗?

2020-08-31 10:14:51 +08:00
 sudoy

听到不少的评论说 python 不适合做带 UI 的程序,可我用了 kivy 之后觉得很强大,桌面的程序界面都能实现。网页程序就更不用说了,有强大的 django 框架,如果做前后端分离还有 django restful 或者 flask 。是不是说 python 不适合做带 UI 的程序的,都没好好用过这些 UI 库?

9078 次点击
所在节点    Python
50 条回复
xuboying
2020-09-01 12:10:51 +08:00
嫌弃 gil 的试试 3.8 的 sharedmemory
myCupOfTea
2020-09-01 15:52:12 +08:00
...我以为现在都是 electron 干一切ヾ|≧_≦|〃,就是文件大了点
sudoy
2020-09-01 16:07:44 +08:00
@shintendo @steptodream 感谢回复,可能是我没有表达清楚,但也没有必要争议。Django 当然不是 UI 库,这点常识大家都知道。做后端渲染的网页程序 django 可以一步到位,做前端渲染(也就是前后端分离)的 django 也有 restful 可以提供 api 。前端那里肯定是前端三件套( html/css/js )这毫无疑问
sudoy
2020-09-01 16:09:52 +08:00
@myCupOfTea electron 可以做到很漂亮,但是体验感觉还是没有调用本地 UI 库的好
charlie21
2020-09-01 20:28:31 +08:00
这是一个话语权的问题,Windows 觉得 Windows 桌面软件的话语权在自己手里所以它推 WPF,你觉得你是 python 熟手你的话语权在自己手里 所以你干啥都用 python 。基本上结果就是如果自己搞可以按自己的知识储备来,如果是 ......

金子就是用来埋没的。反正大家都有眼无珠这么多年也是过来了
myCupOfTea
2020-09-02 09:43:17 +08:00
@sudoy 但是开发效率差距太大了
Windyzhou
41 天前
@sudoy #43 楼主,你 kivy 是怎么安装的,在 win 下吗?据说只能在 linux 下安装,可是我跑 buildozer Android debug 搞了一天都没搞好,据说第一次安装要 1 个小时左右。
sudoy
40 天前
@Windyzhou 我好久没用 kivy 了,你这么一问,我刚才试了一下,两三分钟就装好了。环境如下:

Windows 11, 64 位

用到的命令如下:

1. 新建一个文件夹

2. 创建 python 虚拟环境:
python -m venv kivy_venv

3. 激活虚拟环境:
kivy_venv\Scripts\activate

4. 安装 kivy:

python -m pip install "kivy[base]"

5. 创建一个简单的 ui 文件, 命名为 app.py , 文件内容在最底下。

6. 运行就出来 UI 界面了
python app.py


```
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button
from kivy.uix.textinput import TextInput

class CalculatorApp(App):
def build(self):
# Main layout
layout = BoxLayout(orientation='vertical', padding=10, spacing=10)

# Text input for display
self.display = TextInput(
multiline=False,
readonly=True,
halign='right',
font_size=32,
size_hint_y=0.2
)
layout.add_widget(self.display)

# Create buttons layout
buttons = [
['7', '8', '9', '/'],
['4', '5', '6', '*'],
['1', '2', '3', '-'],
['.', '0', 'C', '+']
]

# Add button grid
for row in buttons:
h_layout = BoxLayout()
for label in row:
button = Button(
text=label,
pos_hint={'center_x': 0.5, 'center_y': 0.5}
)
button.bind(on_press=self.on_button_press)
h_layout.add_widget(button)
layout.add_widget(h_layout)

# Add equals button
equals_button = Button(
text='=',
size_hint_y=0.2,
background_color=[1, 0, 0, 1] # Red color
)
equals_button.bind(on_press=self.on_solution)
layout.add_widget(equals_button)

return layout

def on_button_press(self, instance):
current = self.display.text
button_text = instance.text

if button_text == 'C':
# Clear the display
self.display.text = ''
else:
# Add the button text to display
self.display.text = current + button_text

def on_solution(self, instance):
try:
# Evaluate the expression
self.display.text = str(eval(self.display.text))
except:
self.display.text = 'Error'

if __name__ == '__main__':
CalculatorApp().run()
```
Windyzhou
40 天前
@sudoy #48 我是要生成 apk ,要用 buildozer 构建,你试过没
sudoy
40 天前
@Windyzhou 这个没有试过,安卓开发我没学过,这个 kivy 说是可以跨平台,但是我也只在 Windows 上运行过几个 hello world 项目

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

https://tanronggui.xyz/t/702731

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

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

© 2021 V2EX