精华内容
下载资源
问答
  • 转自:用pythonwindowGUI程序 - 一张A4纸一直以为windows上的UI程序只能用.net,这让我这个web工程师很是遗憾,虽然之前学过python的爬虫,但是从来没往这方面想.最近突然发现可以用pythonwindows桌面程序,很是...

    转自:用python写windowGUI程序 - 一张A4纸

    一直以为windows上的UI程序只能用.net写,这让我这个web工程师很是遗憾,虽然之前学过python的爬虫,但是从来没往这方面想.最近突然发现可以用python写windows桌面程序,很是欣喜.

    安装

    写window程序当然要在window下运行,所以这里用的是anaconda

    conda install tk

    代码

    这里给出一个最简单的桌面程序的例子

    #!/usr/bin/env python

    # -*- coding: utf-8 -*-

    "a hello world GUI example."

    from tkinter import *

    class Application(Frame):

    def __init__(self, master=None):

    Frame.__init__(self, master)

    self.pack()

    self.createWidgets()

    def createWidgets(self):

    self.nameInput = Entry(self)

    self.nameInput.pack()

    self.alertButton = Button(self, text="Hello", command=self.hello)

    self.alertButton.pack()

    def hello(self):

    name = self.nameInput.get() or "world"

    messagebox.showinfo("Message", "Hello, %s" % name)

    app = Application()

    app.master.title("Hello World")

    # 主消息循环:

    app.mainloop()

    打包成exe

    上面的程序还是.py结尾的,如何变成windows经常见到的.exe文件呢

    pip install pyinstaller

    pyinstaller -F -w -i icon.ico demo.py

    生成的exe文件就在子目录dist中。-F表示指定打包后只生成一个exe格式的文件,-w表示窗口,无控制台,-i是图标

    展开全文
  • python操作Windows窗口程序

    万次阅读 多人点赞 2018-03-16 17:23:09
    定时获取数据接口数据写入Excel表格,Excel需要被其他程序使用,需要处于开启状态。 Pywin32 首先,安装一个Pywin32,为python提供访问Windows API的扩展,提供了齐全的windows常量、接口、线程以及COM机制等等...

    想要看更加舒服的排版、更加准时的推送
    关注公众号“不太灵光的程序员”
    每日八点有干货推送

    场景

    定时获取数据接口数据写入Excel表格,Excel需要被其他程序使用,需要处于开启状态。

    Pywin32

    首先,安装一个Pywin32,为python提供访问Windows API的扩展,提供了齐全的windows常量、接口、线程以及COM机制等等。其次,为了方面查找目标窗口的句柄,可以下载一个微软自家的Spy++,这玩意儿满大街都是。有了它,还能很方便的查看窗体的消息。
    句柄是一个32位整数,在windows中标记对象用,类似一个dict中的key。
    消息是windows应用的重要部分,用来告诉窗体“发生了什么”,比如给一个按钮发送BN_CLICKED这么个消息,按钮就知道“哦,我被点了”,才能执行相应的下一步操作。本文将大量使用消息机制。详情参看这篇文章。

    查找窗体句柄

    貌似在win32编程的世界里,包括窗口到文本框的所有控件就是窗体,所有的窗体都有独立的句柄。要操作任意一个窗体,你都需要找到这个窗体的句柄,这里,我们就可以用到FindWindow函数和FindWindowEx函数。在pywin32中,他们都属于win32gui的模块。
    python获取窗口句柄

    FindWindow(lpClassName=None, lpWindowName=None):

    描述:自顶层窗口(也就是桌面)开始搜索条件匹配的窗体,并返回这个窗体的句柄。不搜索子窗口、不区分大小写。找不到就返回0
    参数:
    lpClassName:字符型,是窗体的类名,这个可以在Spy++里找到。
    lpWindowName:字符型,是窗口名,也就是标题栏上你能看见的那个标题。
    说明:这个函数我们仅能用来找主窗口。
    ####FindWindowEx(hwndParent=0, hwndChildAfter=0, lpszClass=None, lpszWindow=None);
    描述:搜索类名和窗体名匹配的窗体,并返回这个窗体的句柄。不区分大小写,找不到就返回0。
    参数:
    hwndParent:若不为0,则搜索句柄为hwndParent窗体的子窗体。
    hwndChildAfter:若不为0,则按照z-index的顺序从hwndChildAfter向后开始搜索子窗体,否则从第一个子窗体开始搜索。
    lpClassName:字符型,是窗体的类名,这个可以在Spy++里找到。
    lpWindowName:字符型,是窗口名,也就是标题栏上你能看见的那个标题。
    说明:找到了主窗口以后就靠它来定位子窗体啦。

    菜单操作

    有了句柄,我们就可以操作FaceGen了!嗯,要先打开文件,File→Open,然后再File→Save Image(很悲剧,Save Image没有快捷键,所以不得不进行菜单操作)。现在我们有了FindWindow和FindWindowEx,要怎么操作菜单呢?

    哦,抱歉,靠他俩还做不到。

    窗口的菜单就像窗口的标题栏一样,是窗口自身的一部分,不是其他窗体控件,也就没有办法用FindWindow和FindWindowEx返回句柄。所以要对菜单进行操作的话,我们需要新的函数,也就是GetMenu,GetSubMenu和GetMenuItemID,它们也都属于win32gui模块。结合下图来说:

    PostMessage(hWnd, Msg, wParam, lParam)

    描述:在消息队列中加入为指定的窗体加入一条消息,并马上返回,不等待线程对消息的处理。
    参数:
    hWnd:整型,接收消息的窗体句柄
    Msg:整型,要发送的消息,这些消息都是windows预先定义好的,可以参见系统定义消息(System-Defined Messages)
    wParam:整型,消息的wParam参数
    lParam:整型,消息的lParam参数
    说明:简单说,就是给指定程序发一个消息,这些消息都用整型编好号,作为windows的常量可以查询的。在这里,我们用的就是win32con这个库里定义的WM_COMMAND这个消息,具体的wParam和lParam是根据消息的不同而不同的。具体请根据MSDN查阅。

    GetMenu(hwnd)

    描述:获取窗口的菜单句柄。
    参数:
    hwnd:整型,需要获取菜单的窗口的句柄。
    说明:获取的是插图中黄色的部分。

    GetSubMenu(hMenu, nPos)

    描述:获取菜单的下拉菜单或者子菜单。
    参数:
    hMenu:整型,菜单的句柄,从GetMenu获得。
    nPos:整型,下拉菜单或子菜单的的索引,从0算起。
    说明:这个可以获取插图中蓝色的部分;如描述所述,这个不仅可以获取本例中的下拉菜单,还可以获取子菜单。

    GetMenuItemID(hMenu, nPos)

    描述:获取菜单中特定项目的标识符。
    参数:
    hMenu:整型,包含所需菜单项的菜单句柄,从GetSubMenu获得。
    nPos:整型,菜单项的索引,从0算起。
    说明:这个获取的就是红色区域中的项目啦,注意,分隔符是被编入索引的,所以Open的索引是2而非1,而Exit的索引是9而非6。

    控件操作

    在这里,我们用了SendMessage而不是PostMessage,其区别就在于我们可以通过SendMessage取得消息的返回信息。因为对于我们要设置文本框信息的WM_SETTEXT信息来说,设置成功将返回True。

    SendMessage(hWnd, Msg, wParam, lParam)

    描述:在消息队列中加入为指定的窗体加入一条消息,直到窗体处理完信息才返回。
    参数:
    hWnd:整型,接收消息的窗体句柄
    Msg:整型,要发送的消息,这些消息都是windows预先定义好的,可以参见系统定义消息(System-Defined Messages)
    wParam:整型,消息的wParam参数
    lParam:整型,消息的lParam参数
    说明:wParam和IParam根据具体的消息不同而有不同的定义,详情参阅Part 2.

    问题

    在开发机器上是可以正常运行的,但是换在其他机器上就会报1400的错误

    盐池数据同步已开启 >> 西部绿谷数据.xls
    盐池数据本次同步已完成 时间 2018-03-16 14:34:01  数据60分钟后更新 >> 西部绿谷数据.xls
    Traceback (most recent call last):
      File "data_acquisition_3600.py", line 414, in <module>
    pywintypes.error: (1400, 'CloseWindow', '\xce\xde\xd0\xa7\xb5\xc4\xb4\xb0\xbf\xda\xbe\xe4\xb1\xfa\xa1\xa3')
    Failed to execute script data_acquisition_3600
    

    pywintypes.error 1400 开始以为是编码问题,发现还是找不到窗口句柄,后来发现获取窗口句柄和进程中的名字有关,不同版本的操作系统、Excel的窗口名称和进程名都不一致,需要特别注意。

    进程名

    这里写图片描述

    窗口名

    这里写图片描述

    代码

    # -*- coding:utf-8 -*-
    """
    Created on 2018/3/12
    
    @author: jj
    """
    import urllib
    import json
    import xlwt
    import copy
    import time
    import os
    import win32gui
    import win32con
    
    def write_ex(data):
        """
        数据 写 文件
        :param data:
        :return:
        """
        file = xlwt.Workbook(encoding='utf-8')
        table = file.add_sheet("sheet1")
        params = ['类型', '项目名称', '设备编号', '阀门开关', '泵1开关', '泵2开关', '水位', '上报时间', '水池大小', '管径']
        params_code = ['leixing', 'name', 'code', 'famen', 'ben1', 'ben2', 'shuiwei', 'date', 'daxiao', 'guanjing']
        for index, item in enumerate(params):
            table.write(0, index, item)
        table.write(0, 10, time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())))
        for l_index, equipment in enumerate(data):
            for j_index, item in enumerate(params_code):
                table.write(l_index+1, j_index, equipment.get(item))
        filename = u"西部绿谷数据.xls"
        file_path = os.path.join(filename)
        file.save(file_path)
    
    if __name__ == '__main__':
        print u'盐池数据同步已开启 >> 西部绿谷数据.xls'
        while True:
            get_api()
            print u'盐池数据本次同步已完成 时间 %s  数据5分钟后更新 >> 西部绿谷数据.xls' % time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))
            os.startfile(u"西部绿谷数据.xls")   # 打开文件
            wndtitle = u"西部绿谷数据.xls  [兼容模式] - Excel"   # 进程名
            wndclass = None
            wnd = win32gui.FindWindow(wndclass, wndtitle)    # 获取窗口句柄
            win32gui.CloseWindow(wnd)      # 窗口最小化
            time.sleep(300)
            win32gui.SendMessage(wnd, win32con.WM_CLOSE)   # 关闭窗口
    

    推荐阅读:

    展开全文
  • C/C++无控制台窗口程序

    千次阅读 2018-07-01 13:47:18
    #include "stdio.h" #pragma comment(linker,"...)//不显示窗口 #pragma comment(linker,"/MERGE:.rdata=.text /MERGE:.data=.text /SECTION:.text,EWR")//减小编译体积 //设置一下...
    #include "stdio.h"
    
    #pragma comment(linker,"/subsystem:\"windows\" /entry:\"mainCRTStartup\"")//不显示窗口
    #pragma comment(linker,"/MERGE:.rdata=.text /MERGE:.data=.text /SECTION:.text,EWR")//减小编译体积
    //设置一下链接选项
    int main(int argc, char* argv[])
    {
    
    
        return 0;
    }
    
    
    展开全文
  • 怎么C++的窗口程序在VC++6.0中?

    千次阅读 2017-03-31 11:58:21
    创建Windows窗口程序有两种方式。 Win32 Application(即Win32 API)或者MFC方式; 其中MFC方式是封装了Win32 API的,两者殊途同归! 一:MFC方式 1、启动vc++6.0。 2、在文件菜单里单击新建。 3、在弹出的窗口中...
     创建Windows窗口程序有两种方式。 Win32 Application(即Win32 API)或者MFC方式。
    其中MFC方式是封装了Win32 API的。两者殊途同归!
    一:MFC方式
    1、启动vc++6.0。
    2、在文件菜单里单击新建。
    3、在弹出的窗口中单击MFC AppWizard (exe)。
    4、在右边的工程名称里输入程序名,例如firstc。
    5、单击确定,在弹出的窗体里选择基本对话框,单击完成,单击确定。
    6、这时已经生成了一个窗体,两个按钮的窗口程序,可以运行。
    7、在这个窗体上继续添加添加需要的控制,并添加相应的代码,就可以建立自己想要的窗口程序了。 
    二.Win32 Application方式。
    展开全文
  • c++创建窗口程序

    千次阅读 2018-07-13 15:29:22
    创建一个完整的窗口程序需要四个步骤:1.设计一个窗口类2.注册窗口类3.创建窗口4.显示及更新窗口#include &lt;windows.h&gt; //Windows编程的头文件 #include &lt;stdio.h&gt; ...
  • C#窗口程序入口函数

    千次阅读 2019-05-31 17:30:21
    参考图 说明 新建一个C#窗口程序,会有两个主要文件:Program.cs、Form1.cs 作用 Program.cs 用于逻辑代码 Form1.cs 用于拖拽控件、管理控件资源 Program.cs中的Main(...
  • C# 窗口程序入口

    千次阅读 2018-08-13 14:27:54
    新建一个C#窗口程序,会有三个主要文件:Program.cs、Form1.cs、Form1.cs[设计]。分别用来逻辑代码、拖拽控件、管理控件资源地方。 Program.cs中的Main()是入口函数,Application.Run(new Form1()) 是创建新的...
  • Eclipse中创建第一个窗口程序

    千次阅读 2019-07-21 18:35:55
    介绍在Eclipse中安装WIndowBuilder插件的几种方式,并用WIndowBuilder创建了第一个窗口程序
  • 1.运行Qt窗口进程,查找外部窗口句柄 (FindWindow 、 FindWindowEx 等) 2.设置父窗口 SetParent 3.移动窗口 MoveWindow、SetWindowPos 4.如果需要去掉Qt窗口的标题栏,可以修改窗口样式 SetWindowLong 5.在你...
  • Windows窗口程序设计入门(C#版)

    千次阅读 多人点赞 2018-05-05 13:13:04
    这次用C#个简单的窗口程序,这篇文章完全是面向新手的。我简单说明一下我们要实现的功能:有两个窗体Form1和Form2,这两个窗体里面都有一个TextBox和一个Button。①当单击Form1里面的Button时,加载出Form2,同时...
  • 众所周知,C#语言在Windows窗口程序开发上有着其他程序语言无法比拟的优势,使用C#程序开发窗口类程序也是非常快速和方便。其实无所不能的python对于窗口程序的开发也是非常方便和快捷的,那么,怎么将开发好的...
  • 编写Qt多窗口程序

    千次阅读 2017-04-08 20:24:02
    ...1.首先打开Qt Creator,新建Qt Widgets Application,项目名称设置为windows,在类信息界面保持基类为QMainWindow、类名为MainWindow,这样将会生成一个主窗口界面。 2.完成项目创建后,双击
  • c语言实现的简易窗口程序

    千次阅读 2016-09-10 07:58:47
    ","我的第一个窗口程序",MB_OK); } MessageBox(hWnd,IpText,IpCaption,uType) 参数信息如下: hWnd:消息框拥有窗口; IpText:消息框窗口; IpCaption:消息框标题; uType:消息框中按钮及图
  • 0x00前言 文章中的文字可能存在语法错误以及标点错误,请谅解; 如果在文章中发现代码错误或其它问题请告知,感谢! 0x01 概述 最近在学习windows程序设计的创建窗口这方面的...0x02 创建一个完整的窗口程序的步骤 ...
  • Windows窗口程序闪退问题

    千次阅读 2015-03-03 20:38:55
    今天进行Windows编程中遇到了一个问题,程序执行后直接闪退。在仔细查看好久后,发现是WinMain函数中消息循环过程出现了错误。本来应该是while却成了if:  While( msg.message != WM_QUIT)  { ............ ...
  • vs创建无窗口程序

    千次阅读 2015-10-17 22:14:37
    1.使用向导生成控制台程序 2.菜单中选择 Project->Properties, 弹出Property Pages窗口 3.在左边栏中依次选择:Configuration Properties->C/C++->Preprocessor,然后在右边栏的Preprocessor Definitions对应的项中...
  • 创建一个简单的窗口,包括基础的主函数和回调函数。
  • 用Qt Creator编写一个简单的窗口程序

    万次阅读 多人点赞 2018-06-17 10:16:36
    转载自:https://blog.csdn.net/Lbb2016/article/details/52509645用Qt Creator编写一个简单的窗口程序这次编写的窗口程序的效果图如下: 这个小程序的功能是:在文本框中输入半径,按下计算按钮计算并在右边的...
  • win32gui用于关闭窗口程序(显示最大化最小化) Python调用(运行)外部程序 2019/3/7 在Python中可在脚本中直接使用其他脚本或程序 1 使用os.system(command)运行其他程序 : 参数 command 要执行的命令,...
  • 刚刚在为项目搭建单元测试框架, google test必须要求在控制台下显示,因此将项目的窗口程序改成了控制台程序。 #pragma comment(linker, "/subsystem:console")同时将WinMain修改成main。 常见错误:1. #pragma ...
  • 可以通过简单的代码来创建一些简单的窗口程序。这个特别适合一些小工具的开发,大型项目的话,还是需要专业的工具进行。 下面我就跟大家介绍下方法: 1.使用工程的菜单创建一个Windows Application的程序,并选择...
  • VC++创建一个Windows窗口程序

    千次阅读 2012-09-19 16:50:33
    创建一个完整的Windows窗口程序主要步骤为 WinMain函数的定义创建一个窗口编写消息循环编写窗口过程函数 窗口的创建: 消息循环: 在创建、显示、更新窗口之后,我们需要编写一个消息循环,不断从消息...
  • 创建一个简单的win32 应用窗口程序

    千次阅读 2018-02-05 16:44:27
    创建一个简单的win32 应用窗口程序 按照文章 《创建一个最简单的win32应用程序》的步骤,创建一个win32 应用程序 工程 HelloWin, 选择空项目。之后添加Hello.cpp 内容如下: #include LRESULT CALLBACK ...
  • 使用c++语言如何在visual studio 中编写可视化窗口程序
  • Linux平台下编译运行wxWidgets简单窗口程序下面阐述了如何在VC上实现简单窗口程序,wxWidgets毕竟是跨平台库,windows上好的程序 在别的平台下如何编译运行呢?比如Linux. 一句话,Makefile. makefile.unx文件...
  • 很疑惑,既然窗口可以直接编写,为什么还要基于对话框来写程序
  • Qt笔记-窗口程序在任务栏中隐藏及永久置顶

    千次阅读 多人点赞 2020-04-07 21:22:08
    感觉视频加水印比较麻烦,不如自己个加水印的程序。 如下的效果: 这里有两点要注意,一个是在任务栏中隐藏: 主要是 Qt::Tool setWindowFlags(Qt::WindowStaysOnTopHint | Qt::Window | Qt::...
  • 闲暇之余好久没Socket的网络程序了,最近闲下来,了一个小demo,觉得是一个非常不错的用来练习IO流和Socket,和GUI的一个小程序.  由于是聊天窗口的对话,我分别建立了一个客户端的class文件和服务器端的class文件,...
  • 如何编写简单的应用window窗口程序

    千次阅读 2016-10-07 20:32:43
    hInstance,//创建此窗口应用程序的当前句柄 NULL//不使用该值 ); ShowWindow(hwnd,nCmdShow);//显示窗口 UpdateWindow(hwnd);//绘制用户区 while(GetMessage(&Msg,NULL,0,0))//消息循环 { ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 521,868
精华内容 208,747
关键字:

如何写窗口程序