`
haohappy2
  • 浏览: 325806 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

how to develop winform using python

阅读更多

方法一:PyQT


Qt是一个跨平台的界面库,PyQt就是它的Python版本了,Python的界面库除了PyQt之外,还有wxPython,TK等。
环境:Windows+Python2.6+Qt
1.下载安装环境
python2.6:www.python.org
PyQt2.6:http://www.riverbankcomputing.co.uk/static/Downloads/PyQt4/PyQt-Py2.6-gpl-4.7-1.exe
eric4:http://nchc.dl.sourceforge.net/project/eric-ide/eric4/stable/4.4.0/eric4-4.4.0.zip
eric4是PyQt界面编译器,也可以当作Python的IDE

安装好eric4之后,在Python26\Lib\site-packages\eric4\目录下有个eric4.pyw文件,双击,就打开了eric4编辑器,
初次打开,会有一个配置窗口(Settings-->Preferences),简单配置一下:

Editor-->APIs-->勾上Complie APIs Autocompation,Language中选择Pyhton,点击Add from installed APIs,选择eric4.api或其它你需要的APIs。然后点击下面的”Compile APIs”,这里会需要点时间。结束后点Apply,配置结束。

2.demo

2.1 Project-->New,新建一个工程,起名Hello吧;
2.2 点击编辑器左边Project-Viewer中第二个选项卡Forms,空白处,右键鼠标-->New Form, 弹出对话框选择Dialog,命名Hello,保存之后,自动弹出Qt4的设计窗口(双击UI文件也可以弹出)
2.3 设计窗口左边拉两个按钮,btnClick,btnExit,拉个Edit框
2.4 事件
点击窗口右面的(信号/槽编辑器)中的加号(+),就会出现一条没有定义过的事件,此时在发送者选择btnExit,信号中选择clicked(),接受者中选择Dialog,槽中选择close(),然后保存后关闭设计器。
2.5 在eric界面,在From选项卡中会出现名为Hello.ui文件,在文件名右键,选择Compile Form,选择Generate Dialog Code,设定ClassName,点击右面的New按钮,默认就可以。确定之后,在下面的文本框中,选择btnClick下的第一个on_btnClick_clicked()打上勾,然后OK,回到Project-Viewer下的第一个选项卡Source,双击Hello.py,修改如下

修改

def on_btnClick_clicked(self):   
    """  
    Slot documentation goes here.  
    """  
    # TODO: not implemented yet   
    #raise NotImplementedError   
    self.editTxt.setText("Hello, PyQt!")  
    def on_btnClick_clicked(self):
        """
        Slot documentation goes here.
        """
        # TODO: not implemented yet
        #raise NotImplementedError
        self.editTxt.setText("Hello, PyQt!") 
 



新增:

if __name__ == '__main__':   
        app = QApplication(sys.argv)   
           
        dlog = Dialog()   
        dlog.show()   
           
        sys.exit(app.exec_())  
if __name__ == '__main__':
        app = QApplication(sys.argv)
        
        dlog = Dialog()
        dlog.show()
        
        sys.exit(app.exec_()) 

 按F5运行

 

方法二:

wxPython是一个基于wxWidgets的跨平台界面库

环境是Windows XP+Python2.6+wxPython2.8。wxPython下载地址:http://downloads.sourceforge.net/project/wxpython/wxPython/2.8.9.2/wxPython2.8-win32-unicode-2.8.9.2-py26.exe?use_mirror=nchc。

1. 第一个demo(使用提供的PySimpleAPP),对于demo,先来code再解释:

#coding=utf8   
#!usr/bin/env python   
  
import wx   
class MyFrame(wx.Frame):   
    def __init__(self):   
        print 'MyFrame.__init__'  
        wx.Frame.__init__(self, None, -1, "demo1", size=(300,400))   
        panel = wx.Panel(self, -1)   
        panel.Bind(wx.EVT_MOTION, self.OnMove)   
        wx.StaticText(panel, -1, "Pos:", pos=(10,12))   
        self.posCtrl = wx.TextCtrl(panel, -1, "", pos=(40,10))   
           
    def OnMove(self, event):   
        pos = event.GetPosition()   
        self.posCtrl.SetValue("%s, %s" % (pos.x, pos.y))   
           
           
if __name__ == '__main__':   
#    app = wx.PySimpleApp(True)   
    app = wx.PySimpleApp(True, "demo1.log")   
    frame = MyFrame()   
    frame.Show(True)   
    app.MainLoop()  
#coding=utf8
#!usr/bin/env python

import wx
class MyFrame(wx.Frame):
    def __init__(self):
        print 'MyFrame.__init__'
        wx.Frame.__init__(self, None, -1, "demo1", size=(300,400))
        panel = wx.Panel(self, -1)
        panel.Bind(wx.EVT_MOTION, self.OnMove)
        wx.StaticText(panel, -1, "Pos:", pos=(10,12))
        self.posCtrl = wx.TextCtrl(panel, -1, "", pos=(40,10))
        
    def OnMove(self, event):
        pos = event.GetPosition()
        self.posCtrl.SetValue("%s, %s" % (pos.x, pos.y))
        
        
if __name__ == '__main__':
#    app = wx.PySimpleApp(True)
    app = wx.PySimpleApp(True, "demo1.log")
    frame = MyFrame()
    frame.Show(True)
    app.MainLoop()  

 对于一个应用来说,必不可少的是需要一个wx.APP,一个Frame,所以每个应用必须至少包含这两个,上面的实例也一样,接下来一句一句解释,先从‘__main__’看起:

    app = wx.PySimpleApp(True, "demo1.log")  #起一个App,第一个参数表示是否输出打印,第二个参数表示输出的文件名,若第二个参数为None,则输出到窗口中。
    frame = MyFrame() #起一个Frame
    frame.Show(True)  #显示
    app.MainLoop()      # 交出执行权,进入消息循环

在自定义的MyFrame类中,首先调用基类的初始化函数__init__;然后给Frame增加一个控件Panel,接着给panel绑定wx.EVT_MOTION事件,并设定了回调函数self.OnMove;继续增加控件StaticText;继续增加控件TextCtrl;在回调函数OnMove中,设置postion;

 

import os   
import time   
import datetime   
import wx   
  
class PyOnDemandOutputWindow:   
    """  
    A class that can be used for redirecting Python's stdout and  
    stderr streams.  It will do nothing until something is wrriten to  
    the stream at which point it will create a Frame with a text area  
    and write the text there.  
    """  
    def __init__(self, title = "wxPython: stdout/stderr"):   
        self.frame  = None  
        self.title  = title   
        self.pos    = wx.DefaultPosition   
        self.size   = (450, 300)   
        self.parent = None  
        self.triggers = []   
        self.logfile = None  
  
    def SetParent(self, parent):   
        """Set the window to be used as the popup Frame's parent."""  
        self.parent = parent   
  
  
    def RaiseWhenSeen(self, trigger):   
        """  
        Trigger is a string or list of strings that will cause the  
        output window to be raised when that trigger text is written.  
        """  
        import types   
        if type(trigger) in types.StringTypes:   
            trigger = [trigger]   
        self.triggers = trigger   
           
  
    def CreateOutputWindow(self, st):   
        self.frame = wx.Frame(self.parent, -1, self.title, self.pos, self.size,   
                              style=wx.DEFAULT_FRAME_STYLE)   
        self.text  = wx.TextCtrl(self.frame, -1, "",   
                                 style=wx.TE_MULTILINE|wx.TE_READONLY)   
        self.text.AppendText(st)   
        self.frame.Show(True)   
        self.frame.Bind(wx.EVT_CLOSE, self.OnCloseWindow)   
           
  
    def CreateOutputFile(self, st):   
        self.logfile = file("log.txt", "ab")   
        self.write(st)   
  
    def OnCloseWindow(self, event):   
        if self.frame is not None:   
            self.frame.Destroy()   
        self.frame = None  
        self.text  = None  
        self.parent = None  
  
  
    # These methods provide the file-like output behaviour.   
    def write(self, text):   
        """  
        Create the output window if needed and write the string to it.  
        If not called in the context of the gui thread then uses  
        CallAfter to do the work there.  
        """           
        if self.logfile is None:   
            if not wx.Thread_IsMain():   
                wx.CallAfter(self.CreateOutputFile, text)   
            else:   
                self.CreateOutputFile(text)   
        else:   
            if not wx.Thread_IsMain():   
                wx.CallAfter(self.__write, text)   
            else:   
                self.__write(text)   
  
    def __write(self, text):   
        # helper function for actually writing the text, and   
        # optionally raising the frame if needed   
        dt_now = datetime.datetime.now()   
        dt_now_str = dt_now.strftime("%Y-%m-%d %H:%M:%S")   
           
        self.logfile.write('[%s] %s%s' % (dt_now_str, text, os.linesep))   
  
  
    def close(self):   
        if self.frame is not None:   
            wx.CallAfter(self.frame.Close)   
           
        if self.logfile is not None:   
            self.logfile.flush()   
            self.logfile.close()   
  
  
    def flush(self):   
        if self.logfile is not None:   
            self.logfile.flush()   
     
wxPython封装的很面向对象,使用起来也很顺手哈。
分享到:
评论

相关推荐

    基于WinForm和Python的SoDemo API接口设计源码学习项目

    该项目是一个结合WinForm和Python编写的API接口学习项目,旨在为个人毕业设计提供实践平台。项目包含1517个文件,涵盖多种编程语言,包括412个TypeScript文件、401个Java文件、292个Vue文件等。项目旨在展示丰富的...

    基于Winform和Python的PDF操作工具设计源码

    该工具是一款基于Winform和Python开发的PDF操作工具,项目源码共包含55个文件,其中包含28个C#源代码文件、13个资源文件(.resx)、2个配置文件、2个可执行文件、2个Python脚本、1个许可证文件、1个解决方案文件、1...

    winform using

    在本资源中,"winform using"可能是指探讨如何在C#或Visual Basic .NET等编程语言中有效利用WinForm进行开发。 WinForm的关键知识点包括: 1. **控件使用**:WinForm提供大量的预定义控件,如按钮(Button)、文本框...

    C#how to Winform的按钮、标签及上下文菜单等控件添加快捷键

    C#how to Winform的按钮、标签及上下文菜单等控件添加快捷键

    BLE_Demo(WinForm).rar

    蓝牙BLE WinForm示例程序(可执行文件),使用HC-42低功耗蓝牙模块BLE5.0连接成功,且收发数据正常,可用于简单的BLE蓝牙调试,支持Hex和字符串类型数据收发。 Winform BLE设计要点请查看我的博客相关链接: ...

    基于Python+MySQL编写的(WinForm)图书管理系统【100010099】

    本项目是图书管理信息系统,使得学院的图书信息管理工作能够系统化,规范化,自动化,...我们的后台逻辑和数据的处理是使用python结合mysql数据库以及线程的使用来进行处理,最后得到我们的NCU图书管理系统的1.0版本。

    从C#客户端使用Python脚本(包括绘图和图像)

    标题 "从C#客户端使用Python脚本(包括绘图和图像)" 描述了如何在C#应用程序中集成和执行Python脚本,特别是在处理绘图和图像处理方面。这一技术结合了C#的强大桌面应用开发能力和Python丰富的科学计算与数据分析...

    C#编程 WinForm窗体开发 GridToExcel(源码)

    C#编程 WinForm窗体开发 GridToExcel(源码)C#编程 WinForm窗体开发 GridToExcel(源码)C#编程 WinForm窗体开发 GridToExcel(源码)C#编程 WinForm窗体开发 GridToExcel(源码)C#编程 WinForm窗体开发 GridToExcel(源码)...

    其中包括c#、asp.net、WCF、winform、java、python、安卓、小程序、各种数据库、jQuery、Vue、等各种前端框架视频资源

    其中包括c#、asp.net、WCF、winform、java、python、安卓、小程序、各种数据库,jQuery、Vue、等各种前端框架,UI设计等各种资源,还有源代码,一共接近400个G。资源来之不易,望珍惜

    webapi寄宿于winform

    【标题】"WebAPI寄宿于WinForm"的实现是一个技术方案,它允许开发者在Windows Forms应用程序中直接运行和控制WebAPI服务,而无需依赖IIS(Internet Information Services)这样的传统Web服务器。这种方式的优点在于...

    基于IronPython的WinForm自动化测试设计源码

    该项目是一款基于IronPython的WinForm自动化测试设计源码,总计包含63个文件,其中包含49个Python脚本文件、10个PNG图像文件、1个Markdown文件、1个Python项目文件、1个JPG图像文件、1个ICO图标文件。这些资源旨在...

    Winform与WPF窗体互相调用方法

    在.NET框架中,Windows Forms(Winform)和Windows Presentation Foundation(WPF)是两种不同的UI开发技术。尽管它们各自有着独特的特性和优势,但在实际项目中,开发者有时需要将两者结合,实现Winform窗体与WPF...

    winform GET请求和POST请求

    这两个概念对于任何与Web交互的客户端程序设计都是至关重要的,尤其是在使用C#进行Winform编程时。 GET请求是HTTP协议中最简单也最常用的一种方法。它主要用于从服务器获取资源,请求参数通常附加在URL后面,以问号...

    winform实现FTP上传、下载、删除文件

    在本文中,我们将深入探讨如何使用WinForm应用程序实现FTP(File Transfer Protocol)的基本操作,包括文件的上传、下载和删除。WinForm是.NET框架中用于创建桌面应用的用户界面组件,而FTP则是一种广泛用于互联网上...

    winform中视频播放应用.zip_C#_winform_winform播放视频

    3. 通过编程接口设置视频源,例如:`axWindowsMediaPlayer1.URL = "path_to_your_video_file";` 4. 调用`axWindowsMediaPlayer1.controls.play();`来开始播放视频。 接下来,我们要讨论的是如何实现“无边框窗口”...

    C#Winform 图标 ico png

    在C# WinForm应用程序开发中,图标(Icon)是一个至关重要的元素,它不仅提升了软件的视觉效果,还帮助用户快速识别程序。本资源提供了一系列的图标素材,包括ico和png格式,适用于各种尺寸,如16*16、32*32等,满足...

    通用Winform模板,winform实例大全,C#

    本系统使用winform的绑定机制应用以上模板及对应数据表(视图)实现动态代码生成后续需要做的工作就是应用winform开发自带的数据源方法或者devexpress的datalayoutcontrol方法来拖拽对应的控件和展示数据的gridcontrol...

    C#编程 WinForm窗体开发 Selected(源码)

    C#编程 WinForm窗体开发 Selected(源码)C#编程 WinForm窗体开发 Selected(源码)C#编程 WinForm窗体开发 Selected(源码)C#编程 WinForm窗体开发 Selected(源码)C#编程 WinForm窗体开发 Selected(源码)C#编程 WinForm...

    C#Winform图标素材.rar

    using System.Drawing; private void Form1_Load(object sender, EventArgs e) { // 加载图标文件 Icon myIcon = new Icon("path_to_your_icon_file.ico"); // 获取图标为Bitmap对象 Bitmap buttonIcon = ...

    人脸识别与管理系统界面开发源码(WinForm界面增强,OpenCV-Python智能识别)(第一章)

    通过人脸识别与管理系统界面的开发(WinForm界面增强,OpenCV-Python智能识别),我将以一个用户登录窗体的两种不同登录验证方式向各位同学介绍如何利用WinForm开发出漂亮的应用程序窗体,为我们后面的各个章节中的...

Global site tag (gtag.js) - Google Analytics