热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

pythonwinform自动化_c#winformUI+python底层的一点尝试

鉴于python做winform之类的UI比较弱。于是想结合C#的winform和python的底层开发(windows平台)。主要从一些网站抓取rss,然后解析rs

鉴于python做winform之类的UI比较弱。于是想结合C#的winform 和 python的底层开发(windows平台)。

主要从一些网站抓取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开发推荐。

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()



推荐阅读
  • 如何配置Unturned服务器及其消息设置
    本文详细介绍了Unturned服务器的配置方法和消息设置技巧,帮助用户了解并优化服务器管理。同时,提供了关于云服务资源操作记录、远程登录设置以及文件传输的相关补充信息。 ... [详细]
  • Windows服务与数据库交互问题解析
    本文探讨了在Windows 10(64位)环境下开发的Windows服务,旨在定期向本地MS SQL Server (v.11)插入记录。尽管服务已成功安装并运行,但记录并未正确插入。我们将详细分析可能的原因及解决方案。 ... [详细]
  • PyCharm下载与安装指南
    本文详细介绍如何从官方渠道下载并安装PyCharm集成开发环境(IDE),涵盖Windows、macOS和Linux系统,同时提供详细的安装步骤及配置建议。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • 本章将深入探讨移动 UI 设计的核心原则,帮助开发者构建简洁、高效且用户友好的界面。通过学习设计规则和用户体验优化技巧,您将能够创建出既美观又实用的移动应用。 ... [详细]
  • 本文探讨了在不使用服务器控件的情况下,如何通过多种方法获取并修改页面中的HTML元素值。除了常见的AJAX方式,还介绍了其他可行的技术方案。 ... [详细]
  • 本文介绍如何在QT框架中使用QWebSocket和QTcpSocket实现SSL加密通信,涵盖单向认证设置。单向认证常见于Web通信场景,其中客户端验证服务端证书,而服务端不验证客户端证书。 ... [详细]
  • 在现代网络环境中,两台计算机之间的文件传输需求日益增长。传统的FTP和SSH方式虽然有效,但其配置复杂、步骤繁琐,难以满足快速且安全的传输需求。本文将介绍一种基于Go语言开发的新一代文件传输工具——Croc,它不仅简化了操作流程,还提供了强大的加密和跨平台支持。 ... [详细]
  • 从零开始构建完整手机站:Vue CLI 3 实战指南(第一部分)
    本系列教程将引导您使用 Vue CLI 3 构建一个功能齐全的移动应用。我们将深入探讨项目中涉及的每一个知识点,并确保这些内容与实际工作中的需求紧密结合。 ... [详细]
  • MySQL 数据库迁移指南:从本地到远程及磁盘间迁移
    本文详细介绍了如何在不同场景下进行 MySQL 数据库的迁移,包括从一个硬盘迁移到另一个硬盘、从一台计算机迁移到另一台计算机,以及解决迁移过程中可能遇到的问题。 ... [详细]
  • 深入解析Nginx中的Location指令及其属性
    本文将详细探讨Nginx配置文件中关键的location指令,包括其三种匹配方式(精准匹配、普通匹配和正则匹配),以及如何在实际应用中灵活运用这些匹配规则。此外,还将介绍location下的重要子元素如root、alias和proxy_pass,并解释相关参数的使用方法。 ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • 本文介绍如何通过Windows批处理脚本定期检查并重启Java应用程序,确保其持续稳定运行。脚本每30分钟检查一次,并在需要时重启Java程序。同时,它会将任务结果发送到Redis。 ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有