wxPython實現Frame之間的跳轉/更新的一種方法
wxPython是Python中重要的GUI框架,下面通過自己的方法實現模擬類似PC版微信登入,並跳轉到主介面(朋友圈)的流程。
(一)專案目錄
【說明】
icon : 儲存專案使用的圖片資源
wx_main.py : 專案入口檔案,執行此檔案可以看見效果。
loginFrame.py:登入的介面的Frame定義繪製檔案
contentFrame.py:登入成功之後的介面Frame定義繪製檔案
guiManager.py:介面建立和管理
utils.py:工具類,其中定義了一個獲取icon資料夾中檔案全路徑的工具函式
xDialog.py:定義了有兩項輸入項的Dialog的樣式
(二)專案流程圖
【說明】
wxPython的應用入口是在wx.App()實現的,在OnInit()函式中建立要顯示的Frame物件,在wx.App子類中實現介面重新整理的函式update(),並將其傳遞給新建立的Frame物件,在Frame需要觸發Frame更新的時候,通過這個回撥函式update()來通知wx.App()進行Frame的更新。
(三)效果演示
(四)專案程式碼
(4-1)wx_main.py
#coding=utf-8
import wx
import guiManager as FrameManager
class MainAPP(wx.App):
def OnInit (self):
self.manager = FrameManager.GuiManager(self.UpdateUI)
self.frame = self.manager.GetFrame(0)
self.frame.Show()
return True
def UpdateUI(self, type):
self.frame.Show(False)
self.frame = self.manager.GetFrame(type)
self.frame.Show(True)
def main():
app = MainAPP()
app.MainLoop()
if __name__ == '__main__':
main()
(4-2)guiManager.py
#coding=utf-8
import loginFrame
import contentFrame
class GuiManager():
def __init__(self, UpdateUI):
self.UpdateUI = UpdateUI
self.frameDict = {} # 用來裝載已經建立的Frame物件
def GetFrame(self, type):
frame = self.frameDict.get(type)
if frame is None:
frame = self.CreateFrame(type)
self.frameDict[type] = frame
return frame
def CreateFrame(self, type):
if type == 0:
return loginFrame.LoginFrame(parent=None, id=type, UpdateUI=self.UpdateUI)
elif type == 1:
return contentFrame.ContentFrame(parent=None, id=type, UpdateUI=self.UpdateUI)
(4-3)loginFrame.py
#coding=utf-8
import wx
# 匯入wxPython中的通用Button
import wx.lib.buttons as wxButton
from utils import load_image
import xDialog
class LoginFrame(wx.Frame):
def __init__(self, parent=None, id=-1, UpdateUI=None):
wx.Frame.__init__(self, parent, id, title='登入介面', size=(280, 400), pos=(500, 200))
self.UpdateUI = UpdateUI
self.InitUI() # 繪製UI介面
def InitUI(self):
panel = wx.Panel(self)
logo_sys = wx.Image(load_image('logo_sys.png'), wx.BITMAP_TYPE_ANY).ConvertToBitmap()
wx.StaticBitmap(panel, -1, logo_sys, pos=(90, 90), size=(100, 100))
logo_title = wx.StaticText(panel, -1, '天馬行空', pos=(120, 210))
logo_title.SetForegroundColour('#0a74f7')
titleFont = wx.Font(13, wx.DEFAULT, wx.BOLD, wx.NORMAL, True)
logo_title.SetFont(titleFont)
button_Login = wxButton.GenButton(panel, -1, '登入', pos=(40, 270), size=(200, 40), style=wx.BORDER_MASK)
button_Login.SetBackgroundColour('#0a74f7')
button_Login.SetForegroundColour('white')
self.Bind(wx.EVT_BUTTON, self.loginSys, button_Login)
def loginSys(self, event):
dlg = LoginDialog(self.loginFunction, '#0a74f7')
dlg.Show()
def loginFunction(self, account, password):
print '接收到使用者的輸入:', account, password
self.UpdateUI(1) #更新UI-Frame
class LoginDialog(xDialog.InputDialog):
def __init__(self, func_callBack, themeColor):
xDialog.InputDialog.__init__(self, '登入系統', func_callBack, themeColor)
(4-4)contentFrame.py
#coding=utf-8
import wx
class ContentFrame(wx.Frame):
def __init__(self, parent=None, id=-1, UpdateUI=None):
wx.Frame.__init__(self, parent, -1, title='天馬行空的朋友圈', size=(400, 400), pos=(500, 200))
self.UpdateUI = UpdateUI
self.InitUI() #繪製UI
def InitUI(self):
panel = wx.Panel(self)
wx.StaticText(panel, -1, u'歡迎您的到來!', pos=(30, 30))
(4-5)xDialog.py
#coding=utf-8
import wx
class InputDialog(wx.Dialog):
def __init__(self, title, func_callBack, themeColor):
wx.Dialog.__init__(self, None, -1, title, size=(300, 200))
self.func_callBack = func_callBack
self.themeColor = themeColor
self.InitUI() #繪製Dialog的介面
def InitUI(self):
panel = wx.Panel(self)
font = wx.Font(14, wx.DEFAULT, wx.BOLD, wx.NORMAL, True)
accountLabel = wx.StaticText(panel, -1, '賬號', pos=(20, 25))
accountLabel.SetForegroundColour(self.themeColor)
accountLabel.SetFont(font)
self.accountInput = wx.TextCtrl(panel, -1, u'', pos=(80, 25), size=(180, -1))
self.accountInput.SetForegroundColour('gray')
self.accountInput.SetFont(font)
passwordLabel = wx.StaticText(panel, -1, '密碼', pos=(20, 70))
passwordLabel.SetFont(font)
passwordLabel.SetForegroundColour(self.themeColor)
self.passwordInput = wx.TextCtrl(panel, -1, u'', pos=(80, 70), size=(180, -1), style=wx.TE_PASSWORD)
self.passwordInput.SetForegroundColour(self.themeColor)
self.passwordInput.SetFont(font)
sureButton = wx.Button(panel, -1, u'登入', pos=(20, 130), size=(120, 40))
sureButton.SetForegroundColour('white')
sureButton.SetBackgroundColour(self.themeColor)
# 為【確定Button】繫結事件
self.Bind(wx.EVT_BUTTON, self.sureEvent, sureButton)
cancleButton = wx.Button(panel, -1, u'取消', pos=(160, 130), size=(120, 40))
cancleButton.SetBackgroundColour('black')
cancleButton.SetForegroundColour('#ffffff')
# 為【取消Button】繫結事件
self.Bind(wx.EVT_BUTTON, self.cancleEvent, cancleButton)
def sureEvent(self, event):
account = self.accountInput.GetValue()
password = self.passwordInput.GetValue()
# 通過回撥函式傳遞數值
self.func_callBack(account, password)
self.Destroy() #銷燬隱藏Dialog
def cancleEvent(self, event):
self.Destroy() #銷燬隱藏Dialog
(4-6)utils.py
#coding=utf-8
import os.path
main_dir = os.path.split(os.path.abspath(__file__))[0]
# 返回icon中檔案的系統檔案路徑
def load_image(file):
filePath = os.path.join(main_dir, 'icon', file)
return filePath
原始碼下載地址:
相關推薦
wxPython實現Frame之間的跳轉/更新的一種方法
wxPython是Python中重要的GUI框架,下面通過自己的方法實現模擬類似PC版微信登入,並跳轉到主介面(朋友圈)的流程。 (一)專案目錄 【說明】 icon : 儲存專案使用的圖片資源 w
Intent實現頁面之間跳轉
(首發於 2017 年 9 月 14 日) 1. Intent實現頁面之間的跳轉 1.1 無資料傳遞頁面跳轉 1 Intent intent = new Intent(MainActivity.this,DemoActivity.class); 2 startActivity(intent);
使用帶參建構函式 實現窗體之間跳轉傳值
使用帶參建構函式 //test1程式碼 private void btntest_Click(object sen
Button點選事件實現頁面跳轉的兩種方法
方法一: 常用方式,在java檔案中給Button設定點選監聽事件button.setOnClickListener(),新建Intent類,從MainActivity跳轉至ImageTest but
利用IIS的Url重寫實現http自動跳轉https的配置方法
專案一直使用http未加密的域名,考慮安全性,購買了ca安全證書實現https化,但由於有些場景訪問過來還是http,因為需要把http訪問使用者直接轉為https準備工作:下載安裝iis元件,url重寫,下載地址:https://www.iis.net/downloads/
js中實現頁面跳轉的幾種方法
按鈕式: 1 <INPUT name="pclog" type="button" value="GO" onClick="location.href='//www.jb51.net/'"> 連結式: 1
安卓——Intent(實現頁面跳轉的兩種方法)
下圖中兩個不同的方法就是兩種頁面之間跳轉的情況1>跳轉不返回資料2>跳轉返回資料例項:第一種啟動方式(跳轉不返回資料)第二種啟動方式(跳轉返回資料)先看第一種:點選第一種啟動方式按鈕會出現右邊的圖,然後再點選Button按鈕返回左邊的介面,TextView中的內容
HTML頁面跳轉的5種方法
text div oca 詳細 頁面跳轉 com -- redirect 自動 下面列了五個例子來詳細說明,這幾個例子的主要功能是:在5秒後,自動跳轉到同目錄下的hello.html(根據自己需要自行修改)文件。1) html的實現 ?123456<head>&
防止a標簽跳轉的幾種方法
nbsp ret function java rip cti ref bsp ava 第一種方法 在a標簽的href中添加屬性值 <a href="javascript:void(0)"></a> 第二種方法 給a標簽添加點擊事件,函數的返回值為
小程序丨頁面跳轉的四種方法
ace on() 程序 nta comment 點擊 toolbar n) itl wx.navigateTo({}) ,保留當前頁面,跳轉到應用內的某個頁面,使用 wx.navigateBack 可以返回; 示例: 1 wx.navigateTo({ 2
js 控制頁面跳轉的5種方法
js 控制頁面跳轉的5種方法 程式設計式導航: 點選跳轉路由,稱程式設計式導航,用js編寫程式碼跳轉。 History是bom中的 History.back是回退一頁 Histiory.go(1)前進一頁 History.go(-1)後退一頁 HandleCli
JS頁面跳轉的幾種方法以及註解
來介紹一下我所用的JS跳轉頁面的方法 第一種:這是最常用的了 window.location.href <script language="javascript" type="text/javascript"> window.location.href="l
jsp下頁面跳轉的幾種方法小結
1. RequestDispatcher.forward() 在伺服器端起作用,當使用forward()時,Servlet engine傳遞HTTP請求從當前的Servlet或者是JSP到另外的一個Servlet、JSP 或普通HTML檔案,也即你的form提交至a.js
小程式頁面跳轉的四種方法
小程式頁面跳轉的四種方法 1、wx.navigateTo({}) ,保留當前頁面,跳轉到應用內的某個頁面(下面是跳轉到test頁面的程式碼),然後從test頁面返回上一頁的時候使用 wx.navigateBack 返回; wx.navigateTo({ //
前端頁面跳轉的幾種方法
onclick跳轉 設定window的location.href屬性 onclick="window.location.href='URL'" onclick="location='URL'" 呼叫window的open方法 onclick
Jsp頁面跳轉和js控制頁面跳轉的幾種方法
Jsp 頁面跳轉的幾種方法 1. RequestDispatcher.forward() 在伺服器端起作用,當使用forward()時,Servlet engine傳遞HTTP請求從當前的Servlet或者是JSP到另外的一個Servlet、JSP 或普通HTML檔
Storyboard程式碼跳轉的幾種方法
第一種:給segue標記個Identifier再用程式碼觸發,要點:segue開始的那邊都連在View介面上,不上連上button上,要不點到就會跳轉,如下: 再用程式碼這樣觸發這個跳轉的segue,如: [self performSegueWithIdentifier:
JSP頁面跳轉的幾種方法以及注意點
最近自己在做專案時遇到一個問題,明明加了response.sendRedirect() ,系統也執行了,但是它就是不跳轉;最後在網上找到原因如下: 首先我們要知道的是用r
Python實現"平衡二叉樹"的一種方法
判斷給定的二叉樹是不是平衡二叉樹 本文體中,高平衡二叉樹定義為:二叉樹中任意結點的左右子樹深度差不超過1 Example 1: Given the following tree [3,9,20,null,null,15,7]: 3 / \ 9 2
頁面跳轉的幾種方法
location.replace("path"); //location 的 replace()方法可以用一個新的文件替換當前文件,並且會覆蓋History物件中的記錄 window.location.href = 'path'; window.history.back(-1);