python基礎課程_2學習筆記3:圖形用戶界面

圖形用戶界面

豐富的平臺

寫作Python?GUI程序前,須要決定使用哪個GUI平臺。

簡單來說,平臺是圖形組件的一個特定集合。能夠通過叫做GUI工具包的給定Python模塊進行訪問。

工具包

描寫敘述

Tkinter

使用Tk平臺。非常easy得到。

半標準。

wxpython

基于wxWindows

跨平臺越來越流行。

PythonWin

僅僅能在Windows上使用。

使用了本機的Windows?GUI功能。

JavaSwing

僅僅能用于Jython。使用本機的Java?GUI

PyGTK

使用GTK平臺,在linux上非常流行。

PyQt

使用Qt平臺。跨平臺。

?

每一個工具包都有利弊,但非常大程度上取決于個人喜好。

下面以wxPython為例。

下載和安裝wxPython

下載地址:

http://wxpython.org/download.php

注意:假設python64位的,則必須選用64位的wxPython,否則即便是64位的操作系統也應該選用32位的wxPython

?

建議下載wxPython的演示版本號,并研究它。

創建演示樣例GUI應用程序

開始

?

開始須要導入wx模塊:

import?wx

?

編寫wxPython程序的方法非常多,但不可避免的事情是創建應用程序對象。主要的應用程序類是ex.App,它負責幕后全部的初始化。

最簡單的wxPython程序應該像以下這樣:

import?wx

app=wx.App()

app.MainLoop()

由于沒有不論什么用戶能夠交互的窗體,程序會立馬退出。

?

wx包中的方法都是以大寫字母開頭的,這和python的習慣是相反的。這樣做的原因是這些方法名和基礎的c++wxWidgets中的方法名都是相應的。雖然沒有正式的規則反對方法或者函數名以大寫字母開頭,但規范的做法是為類保留這種名字。

?

窗體和組件

窗體(Window)也稱為框架(Frame),它僅僅是wx.Frame類的實例。

wx框架中的部件都是由它們的父部件作為構造函數的第一個參數創建的。假設正在創建一個單獨的窗體,就不須要考慮父部件。使用None就可以。并且在調用app.MainLoop()前須要調用窗體的Show方法——否則它會一直隱藏。

?

import?wx

?

app=wx.App()

win=wx.Frame(None)

win.Show()

app.MainLoop()

?

運行結果:

?

?

添加button:

import?wx

?

app=wx.App()

win=wx.Frame(None)

btn=wx.Button(win)

win.Show()

app.MainLoop()

運行結果:

?

?

標簽、標題和位置

能夠在創建部件的時候使用構造函數的label參數設定標簽。用title設定標題。

import?wx

?

app=wx.App()

win=wx.Frame(None,title="Simple?Editor")

?

loadButton=wx.Button(win,label='Open')

saveButton=wx.Button(win,label='Save')

?

win.Show()

app.MainLoop()

?

運行結果:

?

?

應該有兩個button,實際僅僅有一個是由于還有一個被隱藏掉了。

?

?

調節button位置:

import?wx

?

app=wx.App()

win=wx.Frame(None,title="Simple?Editor",size=(410,335))

win.Show()

?

loadButton=wx.Button(win,label='Open',pos=(225,5),size=(80,25))

saveButton=wx.Button(win,label='Save',pos=(315,5),size=(80,25))

filename=wx.TextCtrl(win,pos=(5,5),size=(210,25))

contexts=wx.TextCtrl(win,pos=(5,35),size=(390,260),style=wx.TE_MULTILINE?|?wx.HSCROLL)

?

app.MainLoop()

?

運行結果:

?

?

更智能的布局

在調整窗體大小時。應該能保證窗體中的組件也會隨之調整大小和位置。

?

wx內進行布局的最簡單方法是使用尺寸器(sizer),最easy使用的工具就是wx.BoxSizer

import?wx

?

app=wx.App()

win=wx.Frame(None,title="Simple?Editor",size=(410,335))

bkg=wx.Panel(win)

?

loadButton=wx.Button(bkg,label='Open')

saveButton=wx.Button(bkg,label='Save')

filename=wx.TextCtrl(bkg)

contents=wx.TextCtrl(bkg,style=wx.TE_MULTILINE?|?wx.HSCROLL)

?

hbox=wx.BoxSizer()

hbox.Add(filename,proportion=1,flag=wx.EXPAND)

hbox.Add(loadButton,proportion=0,flag=wx.LEFT,border=5)

hbox.Add(saveButton,proportion=0,flag=wx.LEFT,border=5)

?

vbox=wx.BoxSizer(wx.VERTICAL)

vbox.Add(hbox,proportion=0,flag=wx.EXPAND?|?wx.ALL,border=5)

vbox.Add(contents,proportion=1,flag=wx.EXPAND?|

?????????wx.LEFT?|?wx.BOTTOM?|?wx.RIGHT,border=5)

?

bkg.SetSizer(vbox)

win.Show()

app.MainLoop()

?

運行結果:

?

拉伸效果

?

事件處理

GUI術語中,用戶運行的動作叫做事件(event

讓程序注意這些事件并作出反應。能夠將函數綁定到所涉及的事件可能發生的組件上達到這個效果。當事件發生時。函數會被調用。利用部件的Bind方法能夠將事件處理函數鏈接到給定的事件上。

完畢了的程序

代碼:

import?wx

?

def?load(event):

????????file=open(filename.GetValue())

????????contents.SetValue(file.read())

????????file.close()

?

def?save(event):

????????file=open(filename.GetValue(),'w')

????????file.write(contents.GetValue())

????????file.close()

?

app=wx.App()

win=wx.Frame(None,title="Simple?Editor",size=(410,335))

?

bkg=wx.Panel(win)

?

loadButton=wx.Button(bkg,label='Open')

loadButton.Bind(wx.EVT_BUTTON,load)

?

saveButton=wx.Button(bkg,label='Save')

saveButton.Bind(wx.EVT_BUTTON,save)

?

filename=wx.TextCtrl(bkg)

contents=wx.TextCtrl(bkg,style=wx.TE_MULTILINE?|?wx.HSCROLL)

?

hbox=wx.BoxSizer()

hbox.Add(filename,proportion=1,flag=wx.EXPAND)

hbox.Add(loadButton,proportion=0,flag=wx.LEFT,border=5)

hbox.Add(saveButton,proportion=0,flag=wx.LEFT,border=5)

?

vbox=wx.BoxSizer(wx.VERTICAL)

vbox.Add(hbox,proportion=0,flag=wx.EXPAND?|?wx.ALL,border=5)

vbox.Add(contents,proportion=1,flag=wx.EXPAND?|

?????????wx.LEFT?|?wx.BOTTOM?|?wx.RIGHT,border=5)

?

bkg.SetSizer(vbox)

win.Show()

app.MainLoop()

?

1?輸入地址,點擊openbutton,以下顯示文件內容。

2?在以下區域編輯后點擊savebutton關閉程序。

3?運行1步驟可看到剛才編輯的效果。

?

版權聲明:本文博客原創文章,博客,未經同意,不得轉載。

轉載于:https://www.cnblogs.com/hrhguanli/p/4639428.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/397867.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/397867.shtml
英文地址,請注明出處:http://en.pswp.cn/news/397867.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

vim編輯器之按鍵說明

viim編輯器文本:純文本,ASCII test;文本編輯種類:行編輯器:sed全屏編輯器:nano,vi其他編輯器:gedit 一個簡單的圖形編輯器gvim 一個vim編輯器的圖形版本 一.打開文件幾種方法命令格式:vim [options] [files]常用選項:#:打開文件后,直接讓光標處于第#行的行首/PATTERN:打開…

idea ssm打war包_IDEA下從零開始搭建SpringBoot工程

SpringBoot的具體介紹可以參看其他網上介紹,這里就不多說了,就這幾天的學習,個人理解,簡而言之:如果想學習Java工程化、高性能及分布式、深入淺出。微服務、Spring,MyBatis,Netty源碼分析的朋友…

c語言一維數組轉化為二維矩陣,js將一維數組轉化為二維數組

遇到的問題:后端返回的是一組一維數組,但是需要展示的格式是二維數組,常見的場景舉例:后臺返回10個長度的數組,需要分成3個一組展示在banner上。例:[1,2,3,4,5,6,7,8,9,10] > [[1,2,3], [4,5,6], [7,8…

nano使用說明

Main nano help text The nano editor is designed to emulate 仿真、模擬 the functionality and ease-of-use of the UW Pico text editor. There are four main sections of the editor. The top line shows the program version, the current filename being edited, and w…

dataframe 眾數的方法_學習數據分析數據方法論 [描述性統計分析]

數理統計:數理統計是以概率論為基礎,研究社會和自然界中大量隨機現象數量變化基本規律的一種方法。分為:描述統計(描述統計的任務是搜集資料,進行整理、分組,編制次數分配表,繪制次數分配曲線,計…

c語言高級語言期中測試答案,上海理工大學C語言2011期中試題和答案

C語言2010/2011學年 第二學期 期中測試高級語言程序設計(C)試卷 A □BA1. 輸入一行字符&#xff0c;統計其中的英文字母個數。#include void main(){ char ch;int n0;printf(“Input a string:\n”);while(1){ chgetchar();if (ch \n ) break;if (ch> a && ch< z…

前端基礎進階(十):面向對象實戰之封裝拖拽對象

https://segmentfault.com/a/1190000012646488 https://yangbo5207.github.io/wutongluo/ 說明&#xff1a;此處只是記錄閱讀前端基礎進階的理解和總結&#xff0c;如有需要請閱讀上面的鏈接 1.如何讓元素動起來 要讓元素動起來就要修改元素的top、left 、translate 屬性。因為…

iOS - LocalCache 本地數據緩存

1、自定義方式本地數據緩存 1.1 自定義緩存 1 沙盒路徑下的 Library/Caches 用來存放緩存文件&#xff0c;保存從網絡下載的請求數據&#xff0c;后續仍然需要繼續使用的文件&#xff0c;例如網絡下載的離線數據&#xff0c;圖片&#xff0c;視頻文件等。該目錄中的文件系統不會…

如何構建ASP.NET MVC4JQueryAJaxJSon示例

背景&#xff1a; 博客中將構建一個小示例&#xff0c;用于演示在ASP.NET MVC4項目中&#xff0c;如何使用JQuery Ajax。 直接查看JSon部分 步驟&#xff1a; 1&#xff0c;添加控制器(HomeController)和動作方法(Index),并為Index動作方法添加視圖(Index.cshtml),視圖中HTML如…

echarts 有引導線和內部文字_點、線、面構圖的異同以及相互轉化

點、線、面構圖既有相似性&#xff0c;又有差異性。相似的是都有對齊、強調、群組、重復、突出層次的作用&#xff0c;不同的是點的特點是聚焦、線的特點是運動和方向性&#xff0c;面的特性是體量感、穩定性。點的情感最弱&#xff0c;線、面的情感要比點豐富。一、點、線、面…

c語言上機報告之水仙花數,C語言上機報告之水仙花數..doc

C語言上機報告之水仙花數.C語言程序設計上機報告課題名稱&#xff1a;水仙花數的算法院 (系)&#xff1a;工程學院專業班 級&#xff1a; 052126學生姓名&#xff1a; 喻培學 號&#xff1a; 20121004040指導教師&#xff1a; 熊慕舟2013年11月24日C語言上機報告之水仙花數上機…

《Python黑帽子:黑客與滲透測試編程之道》 Web攻擊

Web的套接字函數庫&#xff1a;urllib2 一開始以urllib2.py命名腳本&#xff0c;在Sublime Text中運行會出錯&#xff0c;糾錯后發現是重名了&#xff0c;改過來就好&#xff1a; #!/usr/bin/python #codingutf-8 import urllib2url "http://www.baidu.com"headers …

vCenter Converter Standalone使用文檔

文檔目的能夠使用vCenter Converter Standalone 將物理機操作系統遷移到虛擬機操作系統基礎知識vCenter Converter Standalone 能將物理機上的操作系統、VMware虛擬機上的操作系統或者Hype-V 上的虛擬機操作系統遷移到VMware上。系統環境操作系統&#xff1a;Windows Server 20…

1093芯片做正弦波逆變器_正弦波逆變器中的SPWM調制(鐘任生)

歡迎加入技術交流QQ群(2000人)&#xff1a;電力電子技術與新能源 905723370高可靠新能源行業頂尖自媒體在這里有電力電子、新能源干貨、行業發展趨勢分析、最新產品介紹、眾多技術達人與您分享經驗&#xff0c;歡迎關注我們&#xff0c;搜索微信公眾號&#xff1a;電力電子技術…

android 手機短信恢復,安卓手機短信刪除了怎么恢復?簡單恢復的方法

原標題&#xff1a;安卓手機短信刪除了怎么恢復&#xff1f;簡單恢復的方法安卓手機短信刪除了怎么恢復&#xff1f;手機短信是生活中不經常使用到&#xff0c;但是依然是十分重要的存在&#xff0c;因為我們現在比較喜歡用社交軟件與別人進行交流&#xff0c;但是在一些相對重…

Oracle-查看oracle是否有表被鎖

問題現象&#xff1a; 查看oracle是否有表被鎖 解決方法&#xff1a; select sid,serial#,program,terminal,username,b.object_id,c.object_name from v$session a, v$locked_object b, dba_objects c where a.sid b.session_id and b.object_id c.object_id;轉載于:http…

Python循環的一些基本練習

#1:# name input(請輸入你的身份)# if name egon:# print(--> 超級管理員)# elif name tom:# print(--> 普通管理員)# elif name jack,rain:# print(--> 業務主管)# elif name 其他:# print(--> 普通用戶)#2# today input(今天是星期幾&…

bash下個人習慣的一些文件設置

2019獨角獸企業重金招聘Python工程師標準>>> bash_profile export PATH/usr/local/bin:$PATH export EDITORviinputrc set editing-mode vi #set editing-mode emacs set show-all-if-ambiguous on set completion-ignore-case on set meta-flag on set conver…

docker打包鏡像上傳_Jenkins | 一鍵打包部署Spring Boot 應用的Docker鏡像

一、前言1、本文主要內容將在項目中實際使用到的相關東西整理記錄一波&#xff0c;同時可以方便其他同學在使用到的時候參考一下(自己也備忘)&#xff0c;有不對的地方&#xff0c;歡迎指出~~Docker部署SpringBoot 項目通用Dockerfile文件、腳本Jenkins新建任務圖文詳解3、本文…

android 發送短信 廣播 demo,向Android模擬器打電話發短信的簡單方法

在開發android應用程序時&#xff0c;有時候需要測試一下向android手機撥打電話發送短信時該應用程序的反應。譬如編寫一個廣播接收器&#xff0c;來提示用戶有短信收到或者處理短信&#xff0c;就需要向該手機發送短信來進行測試。這里介紹一種簡單的向android模擬器打電話發短…