V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
Gatsbywl
V2EX  ›  Linux

不懂就问: Java & Python 开发 Linux GUI 程序

  •  
  •   Gatsbywl · 2019-09-19 15:50:35 +08:00 · 8366 次点击
    这是一个创建于 1917 天前的主题,其中的信息可能已经有所发展或是发生改变。

    需求:

    开发一个 Linux 下 GUI 程序,要能按钮实现启动 Oracle,启动 ETL,查看 Oracle 的 status,关闭 Oracle。

    背景:

    不要跟我说命令多么简单或者 shell 开机自动启动脚本多么容易,这些我都知道。现在就是我们部门有一台自己的服务器,搭建的 APEX 报表,之前一直是我维护,关闭,重启之类的。现在我转调以后,就基本没人会了。有时候重启都很棘手。所以领导要求开发一个桌面应用,Linux 的 GUI 程序,要一个傻瓜式的操作,点击一个启动 Oracle按钮,就能自动启动之类的。

    我的想法:

    这个按钮直接对应一个 shell 脚本,点击就运行脚本之类的? 这个程序是放在 Linux 平台中的。我接触桌面应用开发很少,之前学过 PYQT,但是好像 pyqt 打包后太臃肿;所以来请教各位大佬们,这种情况下我该怎么实现这个需求?

    语言:

    Python or Java or C#( C#只是看过,如果框架确实很方便的话,我可以去学)

    57 条回复    2019-12-09 16:47:55 +08:00
    fbcll
        1
    fbcll  
       2019-09-19 15:57:15 +08:00
    WPF 貌似还不能跑在 Linux 下。
    Vegetable
        2
    Vegetable  
       2019-09-19 16:01:30 +08:00
    桌面放一个 启动.sh 重启.sh 查看 status.sh 这样呢...?
    hefish
        3
    hefish  
       2019-09-19 16:03:28 +08:00
    十来年前,有个 Borland 的 JBuilder,好像开发 java 下的 gui 挺方便,现在不知道 javaFX 之类的东西,开发起来方便不。
    Gatsbywl
        4
    Gatsbywl  
    OP
       2019-09-19 16:03:33 +08:00
    @Vegetable 我之前做过了,包括关闭.sh 重启.sh 。。。。。。
    cherbim
        5
    cherbim  
       2019-09-19 16:03:35 +08:00 via iPhone
    @Vegetable
    机智如你
    arrow8899
        6
    arrow8899  
       2019-09-19 16:04:51 +08:00
    不一定要桌面应用啊,web 更方便,搭一个 spring 直接执行 shell 即可,前端只要简单的 html 就搞定了
    Humorce
        7
    Humorce  
       2019-09-19 16:05:27 +08:00 via iPhone
    既然有 de/wm 的话
    直接把你这些按钮对应的脚本在一个文件夹建 shortcut 就好了
    Cooky
        8
    Cooky  
       2019-09-19 16:07:34 +08:00 via Android
    Python pyside2 or pyqt5
    有设计器,信号连接 省事
    Gatsbywl
        9
    Gatsbywl  
    OP
       2019-09-19 16:08:13 +08:00
    @arrow8899 十分感谢。这个方案可以考虑一下。但是目前领导的需求是开发桌面应用。
    knva
        10
    knva  
       2019-09-19 16:10:19 +08:00
    java 写呗
    xwcs
        11
    xwcs  
       2019-09-19 16:16:15 +08:00
    @Gatsbywl chrome 更多工具-->创建快捷方式,改一下名字,这样不就是一个桌面应用了
    Yourshell
        12
    Yourshell  
       2019-09-19 16:16:18 +08:00 via iPhone
    pyqt 臃肿领导又看不见,第一步是能用就好。
    hwenwur
        13
    hwenwur  
       2019-09-19 16:16:21 +08:00 via Android
    樓主考慮 web 的話,可以在 pyqt 里嵌套瀏覽器,或者直接用 electron 寫
    zjsxwc
        14
    zjsxwc  
       2019-09-19 16:19:09 +08:00
    把 Jenkins 拿过来用吧,现成的
    Bryan0Z
        15
    Bryan0Z  
       2019-09-19 16:24:31 +08:00 via Android
    JavaFX 很方便,有工具的,拖拖拽拽 GUI 就出来了
    littlespider89
        16
    littlespider89  
       2019-09-19 16:25:44 +08:00
    electron 最简单
    langhuishan
        17
    langhuishan  
       2019-09-19 16:42:03 +08:00
    pyqt 啊,现在给公司做 ERP 二次开发,方便的很。你那只是一个按钮,直接绑定启动代码,简单的很。
    superalsrk
        18
    superalsrk  
       2019-09-19 17:59:13 +08:00
    pyqt javafx 太重了, 这种需求 直接 tkinter , 虽然丑是丑了点
    chengxiao
        19
    chengxiao  
       2019-09-19 18:21:08 +08:00
    pyqt 真不觉得重在哪里...打包也很方便
    wikinee
        20
    wikinee  
       2019-09-19 18:34:34 +08:00
    不用 PyGobject ?里面有 GLib,Gtk
    smdbh
        21
    smdbh  
       2019-09-19 18:37:19 +08:00
    whiptail ?
    fengshils
        22
    fengshils  
       2019-09-19 18:40:53 +08:00
    直接 tkinter 岂不更好 写完打完可执行文件完事 关键是轻量 足够用就好
    ipwx
        23
    ipwx  
       2019-09-19 18:44:18 +08:00
    只要一个按钮,为啥不学习一下 C++,直接用 Qt。反正又花不了多少时间,一个下午就搞定了。。

    甚至你可以去搞个 Gtk 的 demo 改改就好了,C 语言就可以。
    ipwx
        24
    ipwx  
       2019-09-19 18:44:41 +08:00
    对还有 22L 老哥说的,Python 直接 tkinter 不就行了。
    reus
        25
    reus  
       2019-09-19 19:20:38 +08:00
    qt 哪里重了
    reus
        26
    reus  
       2019-09-19 19:21:16 +08:00
    pyqt 重那就不要用 pyqt,直接 C++写,甚至直接给个 qml 文件用 qmlscene 跑
    JamesMackerel
        27
    JamesMackerel  
       2019-09-19 19:50:55 +08:00 via iPhone
    @arrow8899 似乎看见了一个命令注入 RCE 的现场。
    yrand
        28
    yrand  
       2019-09-19 19:56:13 +08:00
    打包又不用你把库打进去,做个 deb 自动装依赖不就行了。
    axeojpwt
        29
    axeojpwt  
       2019-09-19 19:59:36 +08:00
    用 qt,就这功能的话现学现写一天可以搞完
    jakezh
        30
    jakezh  
       2019-09-19 21:13:02 +08:00
    老哥们都再说啥呢。。用 python tkinter 写个界面 里面一个按钮对应一个 bash script 不就行了。。。。。。。。
    unionx
        31
    unionx  
       2019-09-19 22:40:46 +08:00
    写个简单的 web 界面其实挺好的,html/css/js 三件套基本都会嘛
    wbing
        32
    wbing  
       2019-09-20 00:01:53 +08:00 via iPhone
    同建议 qt,建个新项目拖动个按钮再跳转到槽,然后 system 函数调用你的脚本,几步就搞定,打包也简单。唯一花时间的可能就只是装开发环境了
    Hellert
        33
    Hellert  
       2019-09-20 00:15:15 +08:00 via Android
    Lazarus(free pascal)
    kingfalse
        34
    kingfalse  
       2019-09-20 00:22:09 +08:00 via Android
    Java 分分钟搞定
    HiCode
        35
    HiCode  
       2019-09-20 00:24:29 +08:00
    @Hellert +1,第一反应也是 lazarus
    kingfalse
        36
    kingfalse  
       2019-09-20 00:24:32 +08:00 via Android
    外包吗? 100 块明天交货
    aaniao002
        37
    aaniao002  
       2019-09-20 02:56:58 +08:00 via Android
    浏览器 html 写两个按钮,custom protocol 映射 xdg 映射脚本。貌似这样写的代码是最少的。
    ClericPy
        38
    ClericPy  
       2019-09-20 06:44:27 +08:00
    从实现简单的角度来看:
    python 比较容易
    1. 不在乎颜值但是强烈在乎实现复杂度的话 pysimplegui
    2. 稍微在乎颜值 wxpython, 已经稳定支持 python3
    3. 特别在乎颜值, 直接 web UI
    4. 在乎颜值但是不喜欢启动 http server, pyqt

    话说都用上 linux 了, 为什么不搞 command line ui, pip install fire 就搞定了
    Gatsbywl
        39
    Gatsbywl  
    OP
       2019-09-20 08:46:58 +08:00
    @alls
    谢谢大家的意见!学到了很多新的东西,回头我会好好研究研究。
    Chenamy2017
        40
    Chenamy2017  
       2019-09-20 08:57:07 +08:00
    QT 了解下,50 块外包今天交货
    izoabr
        41
    izoabr  
       2019-09-20 08:58:44 +08:00
    干脆让重启系统好了,写 rc.local
    openthinks
        42
    openthinks  
       2019-09-20 09:07:25 +08:00
    强烈推荐 QT, 楼上也有人说了
    Meridian
        43
    Meridian  
       2019-09-20 09:58:33 +08:00
    jenkins 行吗
    quan01994
        44
    quan01994  
       2019-09-20 10:03:31 +08:00
    可以用 mono 进行开发。gtk, winform,应该可以符合你的要求。
    hoyixi
        45
    hoyixi  
       2019-09-20 10:10:23 +08:00
    PyQt or Java Swing

    快捷方便
    janus77
        46
    janus77  
       2019-09-20 10:20:42 +08:00
    做成 web 页 然后用 electron 等等的包一层就可以了。
    Rwing
        47
    Rwing  
       2019-09-20 10:28:06 +08:00
    c# 的 winform 也可以用 mono 跑在 linux 下,可以尝试一下
    https://www.mono-project.com/docs/gui/winforms/
    hallwoodzhang
        48
    hallwoodzhang  
       2019-09-20 10:32:41 +08:00
    qt(C++, Python)或者 electron(JS, C++)是个人认为最良好的 GUI 开发跨平台方案
    xavier007
        49
    xavier007  
       2019-09-20 10:36:50 +08:00
    为什么不做成 web 管理工具,毕竟 Linux 一般都不安装桌面的,如果远程连接还需要开发服务端和客户端,不如直接做成 web
    blacklinux
        50
    blacklinux  
       2019-09-20 10:44:07 +08:00
    如果只是做非常简单的东西 直接用 python 自带的 tkinter 就行了,简单好学
    myhot21
        51
    myhot21  
       2019-09-20 10:50:09 +08:00 via Android
    linux 下的 gui 工具,很多都是用 java swing 来做的,跨平台很不错,就是上手有点难度。
    qsnow6
        52
    qsnow6  
       2019-09-20 10:52:27 +08:00
    tkinter,脚本写好的情况下,分分钟完事
    ps1aniuge
        53
    ps1aniuge  
       2019-09-20 12:01:08 +08:00
    47 楼正解。用 c#开发一个图形界面,多么复杂都行,编译成 exe,
    在 linux 下 用 mono aaaa.exe 即可运行。win 下也可以运行。
    点击按钮后,调用 shell 的 xxx.sh
    b00tyhunt3r
        54
    b00tyhunt3r  
       2019-09-20 14:33:22 +08:00 via iPhone
    楼主外包不?一上午写完
    Gatsbywl
        55
    Gatsbywl  
    OP
       2019-09-22 17:33:13 +08:00
    @myhot21
    @hoyixi 请问一下,现在我已经用 swing 做完了,是用 IEDA 写的,在我的 linux 电脑上已经测试通过了。那么怎么才能打包成一个应用,能直接在另外一台 linux 电脑上运行我的这个程序? 就像别的 linux 程序一样下载即用。
    hoyixi
        56
    hoyixi  
       2019-09-23 10:11:14 +08:00
    #55 @Gatsbywl
    打包成可执行 jar 就行。不过要保证目标系统也装有 JRE。Win 下好像有第三方的打包工具打成 exe,而且可以把 JRE 一起打包。
    dallaslu
        57
    dallaslu  
       2019-12-09 16:47:55 +08:00
    https://github.com/chriskiehl/Gooey

    把命令行应用包装为 GUI
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3014 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 14:22 · PVG 22:22 · LAX 06:22 · JFK 09:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.