1. 程式人生 > >wxPython製作桌面軟體的一些簡單示例-來自官方文件

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% 的典型場景,來分析引起該狀況的原因及其相應的解決方案。 常見原因 系統執行應用提交查詢(包括資料修改操