设为首页 收藏本站
查看: 974|回复: 0

[经验分享] c# winform UI + python底层的一点尝试

[复制链接]

尚未签到

发表于 2015-12-1 13:23:12 | 显示全部楼层 |阅读模式
  鉴于python做winform之类的UI比较弱。于是想结合C#的winform 和 python的底层开发(windows平台)。
  
  尝试做了一个RSS阅读器。在这里:http://download.csdn.net/detail/lion_awake/8240713。
  主要从一些网站抓取rss,然后解析rss,并在界面上显示。

结构
  这是一个c/s架构。
  server端,用python编写,负责抓取rss并解析。
  client端,从server端拿到数据然后显示。
  client端和server端通过socket进行通讯。
  

掉进去过的坑
  1. c# 正则表达式匹配中文的问题。



json_str = "\\u4e00"
Regex = new Regex("[\\u4e00-\\u9fa5']+")//不起作用
Regex = new Regex("[\\\\u4e00-\\\\u9fa5']+")//ok

  c# \\转换为\的问题,前一篇帖子已经提过。
  2. c# socket发送数据问题:
  帖子这里:http://bbs.csdn.net/topics/390949473
  总结了下,问题的根源在于,服务器端用python-twisted中的LineReceiver这个Protocol,也就是说发送消息以"\r\n"为结束符(windows上)
  

感受
  或许是对c#的语法不熟,相同的东西,用python实现可能只需要1~3h,用C#折腾了两天。主要是出了问题,google不好找答案,其次,很多东西底层调试不进去,最后问问c#同行,基本没有几个能够答个所以然。
  或许为了他的界面而是用C#,但需要权衡下,你是否能够驾驭各种兼容问题以及时间成本。
  虽然python有很多优秀的底层,以及web的ui都不错,但对于desktop ui来说,有所欠缺,特别是游戏。这块短板的弥补,暂时木有神马好的方案。优先级排行:成熟的开源方案 > 成熟的闭源方案> 不咋成熟的开源方案 > 不咋成熟的闭源方案。
  其次还要考虑技能的熟练程度。也许结合这个以后的优先级可能是:成熟的开源方案 > 不咋成熟的开源方案 >  成熟的闭源方案> 不咋成熟的闭源方案。
  

出路:
  python的gui不是太少,恰恰相反,太多!
  自带的有Tkinter(for 2.x python)。
  ===============================================================
  此外:
  QT--商业性质的,比较漂亮,lisence resrited.
  GTK -- 对于linux上面的UI开发推荐。
  WX -- 对于Windows上的UI开发推荐。http://wxpython.org/Phoenix/docs/html/main.html
  TK -- 很丑,跨平台,性能不错(http://wiki.tcl.tk/4145)
  ===============================================================
  以下代码为Tkinter入门级demo。 此外,有一个不错的demo网站:http://thinkingtkinter.sourceforge.net/



# -*- coding: CP936 -*-
from Tkinter import *
root = Tk()
root.geometry("800x600+300+300")
def Noop():
print "not implemented action"
#===menu===============
menu = Menu(root)
root.config(menu=menu)
fileMenu = Menu(menu)
editMenu = Menu(menu)
menu.add_cascade(label="File", menu = fileMenu)
menu.add_cascade(label="Edit", menu = editMenu)
#--"File" menu--
fileMenu.add_command(label="New Project...", command = Noop)
fileMenu.add_command(label="New...", command=Noop)
fileMenu.add_separator()
fileMenu.add_command(label="Exit", command =Noop)
#--"Edit" menu--
editMenu.add_command(label="Redo", command=Noop)

#===Toolbar==============
toolbar = Frame(root)
insertBtn = Button(toolbar, text="Insert Image",command = Noop)
insertBtn.pack(side=LEFT,padx=2)
printBtn = Button(toolbar, text="Print",command = Noop)
printBtn.pack(side=LEFT,padx=2)
toolbar.pack(side=TOP, fill=X)
#===Status Bar ==========
status= Label(root, text="prepare to do something...", bd=1, relief=SUNKEN, anchor=W)
status.pack(side=BOTTOM, fill = X)
#===Message Box =========
import tkMessageBox as msg
#msg.showinfo("window title","an apple a day keeps the doctor away")
answer = msg.askquestion("question1", "Do you like juice?")
print answer
#===Canvas ==============
canvas = Canvas(root,width=200, height =100)
canvas.pack()
blackline = canvas.create_line(0,0,200,50)
redline = canvas.create_line(0,100,200,50,fill='red')
greenbox = canvas.create_rectangle(25,25,100,50,fill='green')
canvas.delete(redline)
#===icon&images==========
photo = PhotoImage(file=r'E:\workspace\python\111.gif')#GIF and PGM/PPM files
label = Label(root, image= photo)
label.pack()

root.mainloop()

  
  调整布局使用grid函数,demo如下:



root=Tk()
#===grid layout =========
frame = Frame(root)
frame.pack()
Label(frame, text="name").grid(row=0, sticky=W)
Label(frame, text="password").grid(row=1, sticky=W)
Entry(frame).grid(row=0,column=1)
Entry(frame).grid(row=1,column=1)
Checkbutton(frame,text="remember me").grid(columnspan=2)
root.mainloop()

  
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-145901-1-1.html 上篇帖子: 【译】TensorFlow Python Docs 之 overview 下篇帖子: Python中类的运算符重载
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

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