wxPython製作桌面軟體的一些簡單示例-來自官方文件
工具:PyCharm Commudity Edition 2017.1
py環境版本:python-27
來自官方的一些示例:
參考文件:https://wiki.wxpython.org/Getting%20Started
# coding=utf-8 import wx import os # 示例1 簡單展示 # app = wx.App(False) # frame = wx.Frame(None, wx.ID_ANY, "Hello World") # frame.Show(True) # app.MainLoop() # 示例2 新增一個編輯框 # class MyFrame(wx.Frame): # """We simple derive a new class of Frame""" # def __init__(self, parent, title, size): # wx.Frame.__init__(self, parent, title=title, size=size) # self.control = wx.TextCtrl(self, style=wx.TE_MULTILINE) # 支援多行的編輯框 # self.Show(True) # # app = wx.App(False) # frame = MyFrame(None, '小型編輯器示例', (800, 600)) # app.MainLoop() # 示例3 新增一個選單欄和一個狀態列 # class MainWindow(wx.Frame): # def __init__(self, parent, title, size): # wx.Frame.__init__(self, parent, title=title, size=size) # self.control = wx.TextCtrl(self, style=wx.TE_MULTILINE) # self.CreateStatusBar() # 在視窗底部 # # 設定選單 # filemenu = wx.Menu() # #wx.ID_ABOUT 和 wx.ID_EXIT是由wxWidgets提供的標準識別符號 # filemenu.Append(wx.ID_ABOUT, "&關於", "關於該程式的資訊") # filemenu.AppendSeparator() # filemenu.Append(wx.ID_EXIT, "&退出", "退出程式") # # 建立選單欄 # menuBar = wx.MenuBar() # menuBar.Append(filemenu, "&檔案") # self.SetMenuBar(menuBar) # self.Show(True) # # app = wx.App(False) # frame = MainWindow(None, "選單欄和狀態列示例", (800, 600)) # app.MainLoop() # 示例4 繫結事件處理 # class MainWindow(wx.Frame): # def __init__(self, parent, title, size): # wx.Frame.__init__(self, parent, title=title, size=size) # self.control = wx.TextCtrl(self, style=wx.TE_MULTILINE) # self.CreateStatusBar() # 在視窗底部 # # 設定選單 # filemenu = wx.Menu() # # wx.ID_ABOUT 和 wx.ID_EXIT是由wxWidgets提供的標準識別符號 # menuabout = filemenu.Append(wx.ID_ABOUT, "&關於", "關於該程式的資訊") # filemenu.AppendSeparator() # menuexit = filemenu.Append(wx.ID_EXIT, "&退出", "退出程式") # # 建立選單欄 # menubar = wx.MenuBar() # menubar.Append(filemenu, "&檔案") # self.SetMenuBar(menubar) # # # 設定事件 # self.Bind(wx.EVT_MENU, self.onabout, menuabout) # self.Bind(wx.EVT_MENU, self.onexit, menuexit) # # self.Show(True) # # def onabout(self, e): # # 帶有OK按鈕的訊息彈出框,wx.OK是一個wxWidgets的標準識別符號 # dlg = wx.MessageDialog(self, "一個小型文字編輯器", "關於示例編輯器", wx.OK) # dlg.ShowModal() # 展示 # dlg.Destroy() # 結束時銷燬 # # def onexit(self, e): # self.Close(True) # 關閉Frame # # app = wx.App(False) # frame = MainWindow(None, "選單欄和狀態列示例", (800, 600)) # app.MainLoop() # 示例5 檔案內容讀取及視窗大小調整 # class MainWindow(wx.Frame): # def __init__(self, parent, title): # self.dirname = '' # self.filename = '' # # # size裡面的引數-1代表使用預設的高度 # # wx.Frame.__init__(self, parent, title=title, size=(800, -1)) # wx.Frame.__init__(self, parent, title=title, size=(800, 600)) # self.control = wx.TextCtrl(self, style=wx.TE_MULTILINE) # self.CreateStatusBar() # 在視窗底部 # # 設定選單 # filemenu = wx.Menu() # # wx.ID_ABOUT 和 wx.ID_EXIT是由wxWidgets提供的標準識別符號 # menuopen = filemenu.Append(wx.ID_OPEN, "&開啟", "開啟一個檔案以編輯") # menuabout = filemenu.Append(wx.ID_ABOUT, "&關於", "關於該程式的資訊") # menuexit = filemenu.Append(wx.ID_EXIT, "&退出", "退出程式") # # 建立選單欄 # menubar = wx.MenuBar() # menubar.Append(filemenu, "&檔案") # self.SetMenuBar(menubar) # # # 設定事件 # self.Bind(wx.EVT_MENU, self.onopen, menuopen) # self.Bind(wx.EVT_MENU, self.onabout, menuabout) # self.Bind(wx.EVT_MENU, self.onexit, menuexit) # # # 定義sizer,sizer並不是一個window,只是windows展示的一種方式 # self.sizer2 = wx.BoxSizer(wx.HORIZONTAL) # self.buttons = [] # for i in range(0, 6): # self.buttons.append(wx.Button(self, -1, "按鈕 &"+str(i))) # 此處-1是按鈕識別符號 # self.sizer2.Add(self.buttons[i], 1, wx.EXPAND) # 此處1是按鈕佔用size比例,EXPAND是可擴充展開,換成wx.ALIGN_CENTER_HORIZONTAL(水平居中)試試 # # # 再用一個sizer,將文字編輯框空間和包含按鈕的sizer2加入該sizer進行展示 # self.sizer = wx.BoxSizer(wx.VERTICAL) # self.sizer.Add(self.control, 1, wx.EXPAND) # 此處1是按鈕佔用size比例,改成3試試 # self.sizer.Add(self.sizer2, 0, wx.EXPAND) # 此處0是按鈕佔用size比例,改成2試試 # # # sizer展示 # self.SetSizer(self.sizer) # self.SetAutoLayout(1) # # self.sizer.Fit(self) # 此處不注掉的話就是自適應,自定義高度不起作用 # self.Show() # # def onabout(self, e): # # 帶有OK按鈕的訊息提示框,wx.OK是一個wxWidgets的標準識別符號 # dlg = wx.MessageDialog(self, "一個小型文字編輯器", "關於示例編輯器", wx.OK) # dlg.ShowModal() # 展示 # dlg.Destroy() # 結束時銷燬 # # def onexit(self, e): # self.Close(True) # 關閉Frame # # def onopen(self, e): # """開啟一個檔案""" # dlg = wx.FileDialog(self, "選擇一個檔案", self.dirname, "", "*.txt", wx.ID_OPEN) # if dlg.ShowModal() == wx.ID_OK: # self.filename = dlg.GetFilename() # self.dirname = dlg.GetDirectory() # f = open(os.path.join(self.dirname, self.filename), 'r') # self.control.SetValue(f.read()) # f.close() # dlg.Destroy() # # app = wx.App(False) # frame = MainWindow(None, "編輯器示例") # app.MainLoop() # 示例6 對話方塊或表單校驗器 # # class ExamplePanel(wx.Panel): # def __init__(self, parent): # wx.Panel.__init__(self, parent) # self.quote = wx.StaticText(self, label="面板示例:", pos=(20, 20)) # # # 展示事件是如何在程式中工作的一個多行文字框控制元件 # self.logger = wx.TextCtrl(self, pos=(300, 20), size=(200, 300), style=wx.TE_MULTILINE | wx.TE_READONLY) # # # 一個按鈕 # self.button = wx.Button(self, label="儲存", pos=(200, 325)) # self.Bind(wx.EVT_BUTTON, self.Onclick, self.button) # # # 編輯元件 # self.lblname = wx.StaticText(self, label="Your Name:", pos=(20, 60)) # self.editname = wx.TextCtrl(self, value="input your name", pos=(140, 60), size=(140, -1)) # self.Bind(wx.EVT_TEXT, self.EvtText, self.editname) # self.Bind(wx.EVT_CHAR, self.EvtChar, self.editname) # # # 組合框元件 # self.sampleList = ['friends', 'advertising', 'web search', 'Yellow Pages'] # self.lblhear = wx.StaticText(self, label="Select the topic ?", pos=(20, 90)) # self.edithear = wx.ComboBox(self, pos=(150, 90), size=(95, -1), choices=self.sampleList, style=wx.CB_DROPDOWN) # self.Bind(wx.EVT_COMBOBOX, self.EvtComboBox, self.edithear) # self.Bind(wx.EVT_TEXT, self.EvtText, self.edithear) # # # 複選框 # self.insure = wx.CheckBox(self, label="Do you want Insured Shipment ?", pos=(20, 180)) # self.Bind(wx.EVT_CHECKBOX, self.EvtCheckBox, self.insure) # # # 單選按鈕 # radioList = ['blue', 'red', 'yellow', 'orange', 'green', 'purple', 'navy blue', 'black', 'gray'] # rb = wx.RadioBox(self, label="What color would you like ?", pos=(20, 210), choices=radioList, majorDimension=3, # style=wx.RA_SPECIFY_COLS) # self.Bind(wx.EVT_RADIOBOX, self.EvtRadioBox, rb) # # def EvtRadioBox(self, event): # self.logger.AppendText('EvtRadioBox: %d\n' % event.GetInt()) # def EvtComboBox(self, event): # self.logger.AppendText('EvtComboBox: %s\n' % event.GetString()) # def Onclick(self, event): # self.logger.AppendText(' Click on object with Id %d\n' % event.GetId()) # def EvtText(self, event): # self.logger.AppendText('EvtText: %s\n' % event.GetString()) # def EvtChar(self, event): # self.logger.AppendText('EvtChar: %d\n' % event.GetKeyCode()) # event.Skip() # def EvtCheckBox(self, event): # self.logger.AppendText('EvtCheckBox: %d\n' % event.IsChecked()) # app = wx.App(False) # frame = wx.Frame(None, size=(600, 400)) # panel = ExamplePanel(frame) # frame.Show() # app.MainLoop() # 帶有可切換導航的面板 # app = wx.App(False) # frame = wx.Frame(None, title="NoteBook示例", size=(600, 400)) # nb = wx.Notebook(frame) # # nb.AddPage(ExamplePanel(nb), "Absolute Positioning") # nb.AddPage(ExamplePanel(nb), "Page Two", True) # nb.AddPage(ExamplePanel(nb), "Page Three") # frame.Show() # app.MainLoop() # 示例6 用sizer重寫以上示例,調整控制元件位置及大小布局 class ExamplePanel(wx.Panel): def __init__(self, parent): wx.Panel.__init__(self, parent) # 建立一些sizer mainSizer = wx.BoxSizer(wx.VERTICAL) grid = wx.GridBagSizer(vgap=5, hgap=5) # 虛擬網格sizer,此處指定了行和列之間的間隙 hSizer = wx.BoxSizer(wx.HORIZONTAL) self.quote = wx.StaticText(self, label="面板示例:", pos=(20, 20)) grid.Add(self.quote, pos=(0, 0)) # 展示事件是如何在程式中工作的一個多行文字框控制元件 self.logger = wx.TextCtrl(self, pos=(300, 20), size=(200, 300), style=wx.TE_MULTILINE | wx.TE_READONLY) # 一個按鈕 self.button = wx.Button(self, label="儲存", pos=(200, 325)) self.Bind(wx.EVT_BUTTON, self.Onclick, self.button) # 編輯元件 self.lblname = wx.StaticText(self, label="Your Name:", pos=(20, 60)) grid.Add(self.lblname, pos=(1, 0)) self.editname = wx.TextCtrl(self, value="input your name", pos=(140, 60), size=(140, -1)) grid.Add(self.editname, pos=(1, 1)) self.Bind(wx.EVT_TEXT, self.EvtText, self.editname) self.Bind(wx.EVT_CHAR, self.EvtChar, self.editname) # 組合框元件 self.sampleList = ['friends', 'advertising', 'web search', 'Yellow Pages'] self.lblhear = wx.StaticText(self, label="Select the topic ?", pos=(20, 90)) grid.Add(self.lblhear, pos=(3, 0)) self.edithear = wx.ComboBox(self, pos=(150, 90), size=(95, -1), choices=self.sampleList, style=wx.CB_DROPDOWN) grid.Add(self.edithear, pos=(3, 1)) self.Bind(wx.EVT_COMBOBOX, self.EvtComboBox, self.edithear) self.Bind(wx.EVT_TEXT, self.EvtText, self.edithear) # 往sizer中新增一些空間 grid.Add((10, 40), pos=(2, 0)) # 此處設定了間隔物的寬高 # 複選框 self.insure = wx.CheckBox(self, label="Do you want Insured Shipment ?", pos=(20, 180)) grid.Add(self.insure, pos=(4, 0), span=(1, 2)) self.Bind(wx.EVT_CHECKBOX, self.EvtCheckBox, self.insure) # 單選按鈕 radioList = ['blue', 'red', 'yellow', 'orange', 'green', 'purple', 'navy blue', 'black', 'gray'] rb = wx.RadioBox(self, label="What color would you like ?", pos=(20, 210), choices=radioList, majorDimension=3, style=wx.RA_SPECIFY_COLS) grid.Add(rb, pos=(5, 0), span=(1, 2)) self.Bind(wx.EVT_RADIOBOX, self.EvtRadioBox, rb) hSizer.Add(grid, 0, wx.ALL, 5) hSizer.Add(self.logger) mainSizer.Add(hSizer, 0, wx.ALL, 5) mainSizer.Add(self.button, 0, wx.CENTER) self.SetSizerAndFit(mainSizer) def EvtRadioBox(self, event): self.logger.AppendText('EvtRadioBox: %d\n' % event.GetInt()) def EvtComboBox(self, event): self.logger.AppendText('EvtComboBox: %s\n' % event.GetString()) def Onclick(self, event): self.logger.AppendText(' Click on object with Id %d\n' % event.GetId()) def EvtText(self, event): self.logger.AppendText('EvtText: %s\n' % event.GetString()) def EvtChar(self, event): self.logger.AppendText('EvtChar: %d\n' % event.GetKeyCode()) event.Skip() def EvtCheckBox(self, event): self.logger.AppendText('EvtCheckBox: %d\n' % event.IsChecked()) # 帶有可切換導航的面板 app = wx.App(False) frame = wx.Frame(None, title="NoteBook示例", size=(600, 400)) nb = wx.Notebook(frame) nb.AddPage(ExamplePanel(nb), "Absolute Positioning") nb.AddPage(ExamplePanel(nb), "Page Two") nb.AddPage(ExamplePanel(nb), "Page Three") frame.Show() app.MainLoop() # 示例7 wxPython的debug # class MyApp (wx.App): # ... # ... # ... # myapp = MyApp() # Stdio直接輸出到視窗 # myapp = MyApp(0) # 棧追蹤資訊輸出到控制檯 # myapp = MyApp(1, 'filespec') #輸出到指定檔案 # NOTE: 這裡用了一些引數名,是為了增加可讀性 # myapp = MyApp(redirect = 1, filename = 'filespec') # 輸出到指定檔案 # myapp = MyApp(redirect = 0) # 輸出到控制檯
相關推薦
wxPython製作桌面軟體的一些簡單示例-來自官方文件
工具:PyCharm Commudity Edition 2017.1 py環境版本:python-27 來自官方的一些示例: 參考文件:https://wiki.wxpython.org/Getting%20Started # coding=utf-8 import
來自官方文件的Ubuntu 16.04 + tensorflow-GPU 配置
I Preprare for CUDA installation 本節是一些準備工作,檢視作業系統版本號、GPU型號等。 To verify that your GPU is CUDA-capable, go to your distribution's equ
KafkaConsumer一些概念解釋(從官方文件整理而來)
閱讀之前假設您已經對kafka有了一定的瞭解 KafkaConsumer類簡介 public class KafkaConsumer<K,V>extends Object implements Consumer<K,V> (
Hystrix配置簡單說明(官方文件簡譯)
詳細資訊,見官方文件。 Hystrix屬性的4中優先順序 1. 內建全域性預設值(Global default from code) 如果下面3種都沒有設定,預設是使用此種,後面用“預設值”代指這種。 2. 動態全域性預設屬性(Dynamic global default property) 可以通過屬性配
c語言的指標的一些簡單示例
#include<stdio.h> void maina() { /** char *names[] = {"Miller","Jones","Anderson"}; p
動態網站開發技術學習2:VS 2010製作作第一個簡單示例網站
製作一個簡單示例網站的步驟: 一,啟動VS 2010開發環境,選擇選單中的“檔案”,選擇其中的“新建”,再選擇“網站”,會彈出”新建網站“對話方塊。
簡單科普下hosts文件原理與制作
div ace 做了 upload strong 不能 測試 設置 pro 簡單科普下hosts文件原理與制作 hosts文件是一個用於儲存計算機網絡中各節點信息的計算機文件。這個文件負責將主機名映射到相應的IP地址。hosts文件通常用於補充或取代網絡中DNS的功能。
python3 簡單實現從csv文件中讀取內容,並對內容進行分類統計
tmp spa writer ict 打開文件 while 類型 spl blog 新手python剛剛上路,在實際工作中遇到如題所示的問題,嘗試使用python3簡單實現如下,歡迎高手前來優化import csv #打開文件,用with打開可以不用去特意關閉file了
Spring Batch 簡單應用(CSV文件操作)(二)
分享 resultset hunk tid XML component files lin 實現 本文將通過一個完整的實例,與大家一起討論運用Spring Batch對CSV文件的讀寫操作。此實例的流程是:讀取一個含有四個字段的CSV文件(ID,Name,Age,Score
Linux下sh文件運行及桌面環境雙擊運行sh文件
comm 桌面環境 src csdn mod art linu .net www. sh文件運行: 1、修改為可執行權限: chmod u+x hello.sh 2、運行 ./hello.sh 3、不使用可執行權限修改,用sh直接運行 sh
jq簡單仿上傳文件
上傳 cnblogs div pan btn cover one next split html: <div> <input id="lefile" type="file" style="display:none"> <inp
簡單的讀取配置文件的工具類
rtp get param set style lin 8.0 top app p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 7.0px Menlo } p.p2 { margin: 0.0px 0.0px 0.0px 0.0p
Android GIS開發系列-- 入門季(13)Gdal簡單寫個shp文件
ring map register enc 資源 ger 下載地址 不可用 tle Gdal是用來讀寫柵格與矢量數據的,在Gdal官網,可以下載相關的資源進行平臺的編譯。其實Arcgis底層也是用Gdal來讀取shp文件的,那在Android中可以直接讀寫shp文件嗎,是可
我的簡單的emacs配置文件
bit 文件 oar lar semi http 顯示時間 one mil ;; Added by Package.el. This must come before configurations of ;; installed packages. Don‘t del
node--初步了解-04 簡單同步的刪除文件
文件 pat reac mdi read 刪除目錄 sync dirsync 了解 /** *@ 簡單刪除文件 * 判斷當前目錄下 是文件還是文件夾 * 刪除目錄 fs.rmdirSync 刪除文件就用 fs.unlinkSync */let fs =require("
數據驅動示例 從txt文件獲取數據
time exce rac line pat append driver exc Coding #encoding=utf-8 from selenium import webdriver import time import traceback #獲取測試數據 with
ELK系列三:Elasticsearch的簡單使用和配置文件簡介
stat 創建索引 prop creat .com 索引 mapping 圖片 keyword 1、定義模板創建索引: 首先定義好一個模板的例子 { "order":14, "template":"ids-1", "state":"open", "set
軟體工程與機房收費系統文件收穫
可行性研究報告 預期的讀者為系統開發人員,管理人員和維護人員。 可行性研究報告,是我們開發一款軟體之前,對這個專案是否可行,能否達到開
【pySerial3.4官方文件】6、示例
示例 Miniterm Miniterm現在可用作模組而不是示例。有關詳細資訊,請參閱serial.tools.miniterm。 miniterm.py miniterm計劃。 setup-miniterm-py2exe.py 這是Windows的py2exe安
MySQL CPU 使用率高的原因和解決方法(來自aliyun官方文件)
使用者在使用 MySQL 例項時,會遇到 CPU 使用率過高甚至達到 100% 的情況。本文將介紹造成該狀況的常見原因以及解決方法,並通過 CPU 使用率為 100% 的典型場景,來分析引起該狀況的原因及其相應的解決方案。 常見原因 系統執行應用提交查詢(包括資料修改操