c# winform UI + python底层的一点尝试
2014-12-09 17:45
330 查看
鉴于python做winform之类的UI比较弱。于是想结合C#的winform 和 python的底层开发(windows平台)。
尝试做了一个RSS阅读器。在这里:http://download.csdn.net/detail/lion_awake/8240713。
主要从一些网站抓取rss,然后解析rss,并在界面上显示。
server端,用python编写,负责抓取rss并解析。
client端,从server端拿到数据然后显示。
client端和server端通过socket进行通讯。
c# \\转换为\的问题,前一篇帖子已经提过。
2. c# socket发送数据问题:
帖子这里:http://bbs.csdn.net/topics/390949473
总结了下,问题的根源在于,服务器端用python-twisted中的LineReceiver这个Protocol,也就是说发送消息以"\r\n"为结束符(windows上)
或许为了他的界面而是用C#,但需要权衡下,你是否能够驾驭各种兼容问题以及时间成本。
虽然python有很多优秀的底层,以及web的ui都不错,但对于desktop ui来说,有所欠缺,特别是游戏。这块短板的弥补,暂时木有神马好的方案。优先级排行:成熟的开源方案 > 成熟的闭源方案> 不咋成熟的开源方案 > 不咋成熟的闭源方案。
其次还要考虑技能的熟练程度。也许结合这个以后的优先级可能是:成熟的开源方案 > 不咋成熟的开源方案 > 成熟的闭源方案> 不咋成熟的闭源方案。
自带的有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/
调整布局使用grid函数,demo如下:
尝试做了一个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()
相关文章推荐
- [导入]C# WinForm编程中的一点小收获(二)
- C# SqlHelper For WinForm的底层操作类库
- C# Winform 跨线程更新UI控件常用方法汇总
- WPF、WinForm(C#)多线程编程并更新界面(UI)(转载积累)
- Atitit. .net c# web 跟客户端winform 的ui控件结构比较
- C# WinForm编程中的一点小收获
- 【WPF学习】WPF、WinForm(C#)多线程编程并更新界面(UI)/子线程更新主界面方式
- Winform(C#.NET)自动更新组件的使用及部分功能实现(一点改进功能)
- C# Winform 跨线程更新UI控件常用方法汇总
- Atitit. .net c# web 跟clientwinform 的ui控件结构比較
- 在C#下的winform 窗体把控件置于顶层和底层
- C# Winform DataGridView 获取数据源帮顶表行状态的一点教训
- 在C#下的winform 窗体把控件置于顶层和底层 .
- C# Winform 跨线程更新UI控件常用方法汇总
- 关于C#报表设计中的一点个人经验(winform),本篇文章是借鉴别人的。。。。用于收藏
- 【转】C#如何让WinForm嵌入桌面窗口最底层
- 在C#下的winform 窗体把控件置于顶层和底层
- c# Winform UI异步委托
- [转]强大的c#.net应用程序winform框架类库-WeifenLuo.WinFormsUI.Docking.dll
- 强大的c#.net应用程序winform框架类库-WeifenLuo.WinFormsUI.Docking.dll