python 中如何使用pywin 中的MFC

18 篇文章 0 订阅

             刚刚接触python,总找不到合适做界面的工具。今天发现pywin is very cool and suitable, so  blog it here to help a programer who is confuse with it.
         

             Python运行后目标界面如下(  WindowsXp系统):

      

一   准备工作:

     1) 安装了python3.2 or python2.7,  

     2) pywin 程序:pywin32-216.1.win32-py3.2.exe

      3) 用vs2008 新建一个MFC dialog程序 ,在vs2008 Resource View 中画出目标MFC界面。产生如下代码:

          

IDD_MFCDIALOG_DIALOG DIALOGEX 0, 0, 467, 334
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_APPWINDOW
CAPTION "Picture Demos"
FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN
    DEFPUSHBUTTON   "OK",IDOK,327,300,50,14
    PUSHBUTTON      "Cancel",IDCANCEL,391,299,50,14
    LTEXT           "datatype:",IDC_STATIC,15,17,42,14
    COMBOBOX        IDC_CBX_DATATYPE,68,15,105,68,CBS_DROPDOWN | CBS_SORT | WS_VSCROLL | WS_TABSTOP
    LISTBOX         IDC_LIST_FILE,15,41,157,145,LBS_SORT | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP
    LTEXT           "element:",IDC_STATIC,18,199,34,8
    LTEXT           "level:",IDC_STATIC,121,200,24,8
    LISTBOX         IDC_LIST_ELEMENT,17,216,67,99,LBS_SORT | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP
    LISTBOX         IDC_LIST_LEVEL,105,216,67,99,LBS_SORT | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP
END


二  根据第一步产生的MFC对话框信息,写Python代码:


 

# -*- coding: utf-8 -*-  
#sqlserver to handle chapter 13
import dbi  
from printscreen import IDC_COMBOBOX_1

IDC_COMBOX_DATATYPE =  2000
IDC_LIST_FILE   	=  2001   
IDC_LIST_ELEMENT   	=  2002   
IDC_LIST_LEVEL    	=  2003
 
import win32ui
import win32api
import win32con
from pywin.mfc import dialog

def MakePictureServerDlgTemplate(title):
	style = win32con.DS_SETFONT | win32con.DS_MODALFRAME | win32con.DS_FIXEDSYS | win32con.WS_POPUP | win32con.WS_VISIBLE | win32con.WS_CAPTION | win32con.WS_SYSMENU
	cs = win32con.WS_CHILD | win32con.WS_VISIBLE
	listCs= cs | win32con.LBS_NOINTEGRALHEIGHT | win32con.WS_VSCROLL | win32con.WS_TABSTOP
	# Window frame and title
	dlg = [ [title, (0, 0, 467, 334), style, None, (8, "MS Sans Serif")], ]

	# ID label and text box
	dlg.append([130, "数据类型:", -1, (15,17,42,14), cs | win32con.SS_LEFT])
	s = cs | win32con.CBS_DROPDOWN | win32con.WS_VSCROLL | win32con.WS_TABSTOP
	dlg.append(['COMBOBOX', None, IDC_COMBOX_DATATYPE, (68,15,105,68), s])
	dlg.append(['LISTBOX', None, IDC_LIST_FILE, (15,41,157,145), listCs])

	
	dlg.append([130, "元素:", -1, (18,199,34,8), cs | win32con.SS_LEFT])
	dlg.append(['LISTBOX', None, IDC_LIST_ELEMENT, (17,216,67,99), listCs])
	dlg.append([130, "层次:", -1, (121,200,24,8), cs | win32con.SS_LEFT])
	dlg.append(['LISTBOX', None, IDC_LIST_LEVEL, (105,216,67,99), listCs])

	# OK/Cancel Buttons
	s = cs | win32con.WS_TABSTOP 
	dlg.append([128, "OK", win32con.IDOK, (327,300,50,14), s | win32con.BS_DEFPUSHBUTTON])
       # dlg.append(["BUTTON","upload",IDC_UPLOAD ,(197, 202,50, 14), s | win32con.BS_DEFPUSHBUTTON])
       s = win32con.BS_PUSHBUTTON | s
	dlg.append([128, "Cancel", win32con.IDCANCEL, (391,299,50,14), s])
	return dlg


class PictureServerDlg(dialog.Dialog):
		
	def __init__(self,title):
		dialog.Dialog.__init__(self,MakePictureServerDlgTemplate(title))
		self.case_name = ''
		self.case_no = ''
		self.file_name = ''
		self.window_name = ''
		
	def OnInitDialog(self):
		rc =  dialog.Dialog.OnInitDialog(self)
		#init the element of the window
		self.cbxFileType = self.GetDlgItem(IDC_COMBOX_DATATYPE)
		self.cbxFileType.AddString("case 01")
		self.cbxFileType.AddString("case 02")
		self.cbxFileType.AddString("case 03")
		
		
		self.lbxFile = self.GetDlgItem(IDC_LIST_FILE)
		for i in range(1,40):
			self.lbxFile.AddString("(case_" + str(i) +")")
		
		self.lbxElement = self.GetDlgItem(IDC_LIST_ELEMENT)
		self.lbxElement.AddString("_Input")
		self.lbxElement.AddString("_Ounput")
		
		self.lbxLevel = self.GetDlgItem(IDC_LIST_LEVEL)
		self.lbxLevel.AddString('Window name')
		self.lbxLevel.AddString('Window name2')
		#print(self.combol1.GetCount())
		return rc


if __name__ == "__main__":
	import sys
	title = 'Login'
	picDlg = PictureServerDlg("")
	picDlg.DoModal()


     友情提示:

             pywin32安装目录\pythonwin\pywin\Demos 下有些做win32界面程序的一些例子,有兴趣有读者可以多尝试尝试。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值