導航:首頁 > 編程語言 > python最好的圖形實現gui

python最好的圖形實現gui

發布時間:2023-10-01 02:07:53

python GUI項目實戰(二)主窗體的界面設計與實現

上一節我們介紹了登錄窗體的GUI設計與功能實現,用戶的賬號和密碼校驗完成後應當跳轉到主窗體內容,這一節我們將具體介紹主窗體界面的設計與功能實現!

我們新建一個900x640的窗口,頂部加入圖片,下面主體部分創建兩個Panedwindow容器,左邊添加按鈕,右邊作為TreeView顯示界面;

顯示效果:(注意:tkinter在Mac上Panedwindow不支持修改前景色背景色)

在右邊的Pannedwindow容器中,添加一個LabelFrame容器作為查詢區域,在LabelFrame容器中添加一系列的Label、Entry、Button控制項,可以輸入學號、姓名、電話、身份證、查詢、和顯示全部信息:

顯示效果:

創建控制項、設置對齊方式和每個列的標題

顯示效果:

登錄成功後,在頂部顯示用戶姓名和登錄時間,用戶姓名是怎麼來的?是我們在登錄窗口輸入的,所以這就涉及到了跨窗體數據的傳遞。這一點非常重要!
登錄窗體(登錄信息)==>主窗體
傳遞的基本方式:構造函數
在主窗體的構造函數中添加一個接收參數 current_user ,在登錄窗體載入新窗體時將參數傳遞進去;
但是我們登錄窗體的登錄函數 login() 中用戶名的變數 user 是局部變數,函數調用完了之後就變數就沒有了,那怎麼調用呢?
我們需要在登錄窗體的構造函數中定義全局變數:

為了獲取用戶登錄的時間,我們定義一個獲取當前時間的方法:

然後在載入主窗體時將參數 self.user 和 self.get_now_time() 作為參數傳遞進去

另一邊,我們在主窗體中,在構造函數中添加全局變數

之後,我們在Top_banner中通過標簽將user信息展示出來:

這樣主窗口就會顯示通過登錄窗口登錄的用戶名(首字母自動轉大寫)和登錄時間:
效果演示:

然後我們在構造方法中把這個函數寫入,以實現自動把學生信息寫入到all_student_list中

文件中讀取到的學生信息存儲到all_student_list列表,以此作為參數傳入載入TreeView的方法中;

在構造方法中調用該方法,自動把所有學生信息載入到TreeView中

運行效果:

這一節我們實現了主窗體的搭建,從界面的布局到TreeView載入全部學生信息。學生數據如此之多,如果我們想精確查看具體某個學生的信息該怎麼做呢?下一講,我們將實現學生信息的查詢功能,敬請期待吧~

Ⅱ Python入門系列(十二)——GUI+多進程

話說,python做圖形界面並不明智,效率並不高。但在某些特殊需求下還是需要我們去使用,所以python擁有多個第三方庫用以實現GUI,本章我們使用python基本模塊tkinter進行學習,因為需求並不大,所以不做太多拓展。
繼續改寫上一章的IP查詢系統(= =,要玩爛了),首先略改下IpWhere.py以備調用~

然後使用tkinter模塊進行圖形界面的實現,調用預編譯的IpWhere模塊 :

額,太丑了,但基本實現我們小小的需求,在以後的py學習中,我們再涉及其他的第三方模塊,此處就當是入門了解吧。

十分抱歉把這么重要的內容放在最後,要不是大佬指點,此次學習可能就要錯過多進程的問題了。
Unix系統提供了forx,python可藉助os模塊調用,從而實現多進程,然而windows系統並不具備,所以我們選擇python內置的multiprocessing多進程模塊進行學習。

首先我們藉助直接調用多進程來改寫下我們在多線程章節用到的例子!

顯然,這么寫實在太蠢了,如果我們的任務量巨大,這並不合適。所以我們引入了進程池的概念,使用進程池進行改寫:

在此,我們可以看到所有進程是並發執行的,同樣,我們在多線程章節就講過,主進程的結束意味著程序退出,所以我們需要藉助join()方法堵塞進程。

我們知道線程共享內存空間,而進程的內存是獨立的,同一個進程的線程之間可以直接交流,也就帶來了線程同步的苦惱,這個我們在多線程章節已經講過了;而兩個進程想通信,則必須通過一個中間代理來實現,即我們接下來的內容:進程間通信。

進程之間肯定是需要通信的,操作系統提供了很多機制來實現進程間的通信。Python的multiprocessing模塊包裝了底層的機制,提供了Queue、Pipes等多種方式來交換數據。我們接下來就以Queue的方式進行學習。

Queue.Queue是進程內非阻塞隊列,multiprocess.Queue是跨進程通信隊列,前者是各自私有,後者是各子進程共有。

還有一個在後者基礎上進行封裝的multiprocess.Manager.Queue()方法,如果要使用Pool創建進程,就需要使用multiprocessing.Manager()中的Queue(),而不是multiprocessing.Queue(),否則會得到一條如下的錯誤信息: RuntimeError: Queue objects should only be shared between processes through inheritance.

接下來我們就藉助進程池來進行多進程操作的改寫,感謝大佬一路輔導。

我們可以看到兩個子線程先執行,然後一個子線程單獨執行,此處有意而為之,讓大家更清晰的了解隊列的使用。期間有一處我們放棄使用jion()方法堵塞,而是自己寫了個循環堵塞,大家根據自己習慣來就好。

話說,真的沒人吐槽么?上面的例子從需求上來講,完全就不需要多線程好不好!emmmm,我們來點實力拓展,寫一個有智商的多線程腳本,順便結合上一節的web來一個綜合篇,隨便找個現實需求吧!

emmm,比如我們來到當當網買書,搜一下我們想要的書籍,發現!!太多了!!真J2亂!!看不過來!!不想翻頁!!直接告訴我哪個便宜、哪個牛逼好不好!!

簡單看下這個url:
http://search.dangdang.com/?key=滲透測試&ddsale=1&page_index=2
其中ddsale參數代表當當自營,page_index代表頁數,key代表搜索內容,我們本次的變數只有頁數。

所以我們構造請求的url為:
'http://search.dangdang.com/?key=滲透測試&ddsale=1&page_index='+str(page)
如果修改的內容不使用str字元串轉化,會收到如下報錯:
TypeError: can only concatenate str (not "int") to str
然後我們看一下頁面內容的分布情況,本次我們關心賣什麼書,賣多少錢?

對應的編寫我們的正則匹配規則,當然了,有更簡便的第三方庫可以幫我們處理,但為了更好的形成流程性認識,我們這里依然使用正則。
我們對應我們需要的書籍名稱和當前價格匹配如下:
<a title=" (.*?)" ddclick=
<span class="search_now_price">¥(.*?)</span>
那麼,思路理清了,我們就開始使用多線程來寫我們的小系統~

然後我們去查看一下我們的結果文件~

現在這個小系統具備的功能就是根據用戶需要選擇要檢索的書籍,然後整理下名稱和價格,開了10個線程,如果小夥伴pc給力的話可以繼續加。簡單的異常處理機制和界面交互,基本滿足日常所需。

Ⅲ 郁悶於Python GUI開發,有沒有好的框架

作為Python開發者,你遲早都會用到圖形用戶界面來開發應用。幸運的是,你有很多選擇,python wifi GUI編程網路列舉了超過30款跨平台框架,以及Pyjamas這樣的,基於谷歌Web Toolkit埠的跨瀏覽器web開發工具。
那麼如何在眾多的Python GUI框架中選擇呢?近日Dice的技術專家David Bolton為Python開發者推薦了Windows、Mac和linux上最好的四款Python3開發工具(Gtk、Qt、Tk和wxWidgets)和五款框架(Kivy、PyQt、gui2Py,libavg以及wxPython)。以下是他的推薦理由:
Kivy
基於MIT授權的Kivy是最熱門的Python開發框架之一,基於OPenGL ES 2,支持多平台(包括Android/iOS)原生的多點觸摸,是一個圍繞主循環的事件驅動型框架,因此非常適合游戲開發。Kivy框架在處理從widgets到動畫方面非常強大,如果你准備開發跨平台圖形應用,或者僅僅需要一個非常強大的跨平台GUI,Kivy都是非常值得關注的。
PyQt
Qt是一個跨平台的多重授權C++框架,如果你開發的是開源項目,你就可以免費使用Qt,否則你需要購買一個商業版本。Qt存在已經很長時間了,曾經屬於諾基亞。Qt是一個非常全面的工具和API庫,為業界所廣泛使用,支持包括移動在內的多個平台,包括GPS導航儀在內的很多設備都使用了Qt。
PyGUI
與Kivy和PyQt相比,PyGUI相對簡單,而且只面向Unix、Mac和Windows平台。作為MVC框架,PyGUI的開發理念是能夠更好更容易地融入Python生態系統。
PyGUI的一個主要目標就是將Python應用與平台底層的GUI代碼撇清,讓應用能夠始終忠實顯示平台的原生GUI,如果你想要快速上手學習Python GUI,那麼PyGUI就是你的入門選擇。
Libavg
與Kivy類似,libavg也採用了OpenGL並支持硬體加速。作為開源軟體,Libavg可以運行在linux、Mac OS X和Windows多個平台,功能加大豐富,例如其框架引擎可以處理數以千計的媒體對象(圖片、文本、視頻和攝像頭輸出),支持快速視頻輸出,並提供一個展示文本的markup系統,此外還支持blur、Chromakery等GPU著色效果。
wxPython
雖然wxPython尚未支持Python3,但資深的wxPython擁有成熟系統的教學資料,絕對值得推薦。xwPython基於wxWidgets,是一個C++寫成的跨平台GUI庫,支持多種文檔格式,並提供文本編輯和字處理widgets。關於wxPython更多的介紹,去看看wiki吧。

Ⅳ 如何用 Python 寫一個帶 GUI 的科學計算程序

這是個代碼, 使用Tkinter圖形庫,如果你是用的linux系統 記得將第一行改為from tkinter import *


這個代碼實現的挺簡單,並不是很復雜的科學計算器界面,你可以以此為基礎,添加自己想要的東西:給你個截圖:

#!/usr/bin/envpython3.4
fromTkinterimport*
importparser

root=Tk()
root.title('Calculator')

i=0

deffactorial():
"""."""
whole_string=display.get()
number=int(whole_string)
fact=1
counter=number
try:
whilecounter>0:
fact=fact*counter
counter-=1
clear_all()
display.insert(0,fact)
exceptException:
clear_all()
display.insert(0,"Error")


defclear_all():
""""""
display.delete(0,END)

defget_variables(num):
""""""
globali
display.insert(i,num)
i+=1

defget_operation(operator):
""""""
globali
length=len(operator)
display.insert(i,operator)
i+=length

defundo():
"""removesthelastenteredoperator/variablefromentrywidget"""
whole_string=display.get()
iflen(whole_string):##repeatsuntil
##
new_string=whole_string[:-1]
print(new_string)
clear_all()
display.insert(0,new_string)
else:
clear_all()
display.insert(0,"Error,pressAC")

defcalculate():
"""
Evaluatestheexpression
ref:http://stackoverflow.com/questions/594266/equation-parsing-in-python
"""
whole_string=display.get()
try:
formulae=parser.expr(whole_string).compile()
result=eval(formulae)
clear_all()
display.insert(0,result)
exceptException:
clear_all()
display.insert(0,"Error!")

root.columnconfigure(0,pad=3)
root.columnconfigure(1,pad=3)
root.columnconfigure(2,pad=3)
root.columnconfigure(3,pad=3)
root.columnconfigure(4,pad=3)

root.rowconfigure(0,pad=3)
root.rowconfigure(1,pad=3)
root.rowconfigure(2,pad=3)
root.rowconfigure(3,pad=3)

display=Entry(root,font=("Calibri",13))
display.grid(row=1,columnspan=6,sticky=W+E)

one=Button(root,text="1",command=lambda:get_variables(1),font=("Calibri",12))
one.grid(row=2,column=0)
two=Button(root,text="2",command=lambda:get_variables(2),font=("Calibri",12))
two.grid(row=2,column=1)
three=Button(root,text="3",command=lambda:get_variables(3),font=("Calibri",12))
three.grid(row=2,column=2)

four=Button(root,text="4",command=lambda:get_variables(4),font=("Calibri",12))
four.grid(row=3,column=0)
five=Button(root,text="5",command=lambda:get_variables(5),font=("Calibri",12))
five.grid(row=3,column=1)
six=Button(root,text="6",command=lambda:get_variables(6),font=("Calibri",12))
six.grid(row=3,column=2)

seven=Button(root,text="7",command=lambda:get_variables(7),font=("Calibri",12))
seven.grid(row=4,column=0)
eight=Button(root,text="8",command=lambda:get_variables(8),font=("Calibri",12))
eight.grid(row=4,column=1)
nine=Button(root,text="9",command=lambda:get_variables(9),font=("Calibri",12))
nine.grid(row=4,column=2)

cls=Button(root,text="AC",command=clear_all,font=("Calibri",12),foreground="red")
cls.grid(row=5,column=0)
zero=Button(root,text="0",command=lambda:get_variables(0),font=("Calibri",12))
zero.grid(row=5,column=1)
result=Button(root,text="=",command=calculate,font=("Calibri",12),foreground="red")
result.grid(row=5,column=2)

plus=Button(root,text="+",command=lambda:get_operation("+"),font=("Calibri",12))
plus.grid(row=2,column=3)
minus=Button(root,text="-",command=lambda:get_operation("-"),font=("Calibri",12))
minus.grid(row=3,column=3)
multiply=Button(root,text="*",command=lambda:get_operation("*"),font=("Calibri",12))
multiply.grid(row=4,column=3)
divide=Button(root,text="/",command=lambda:get_operation("/"),font=("Calibri",12))
divide.grid(row=5,column=3)

#addingnewoperations
pi=Button(root,text="pi",command=lambda:get_operation("*3.14"),font=("Calibri",12))
pi.grid(row=2,column=4)
molo=Button(root,text="%",command=lambda:get_operation("%"),font=("Calibri",12))
molo.grid(row=3,column=4)
left_bracket=Button(root,text="(",command=lambda:get_operation("("),font=("Calibri",12))
left_bracket.grid(row=4,column=4)
exp=Button(root,text="exp",command=lambda:get_operation("**"),font=("Calibri",10))
exp.grid(row=5,column=4)

##Tobeadded:
#sin,cos,log,ln
undo_button=Button(root,text="<-",command=undo,font=("Calibri",12),foreground="red")
undo_button.grid(row=2,column=5)
fact=Button(root,text="x!",command=factorial,font=("Calibri",12))
fact.grid(row=3,column=5)
right_bracket=Button(root,text=")",command=lambda:get_operation(")"),font=("Calibri",12))
right_bracket.grid(row=4,column=5)
square=Button(root,text="^2",command=lambda:get_operation("**2"),font=("Calibri",10))
square.grid(row=5,column=5)

root.mainloop()

Ⅳ Python如何進行GUI桌面開發有哪些不錯的庫可以推薦

Python進行GUI開發的庫其實很多,下面我簡單介紹幾個不錯橋和的庫,感興趣的朋友可以自己嘗試一下,實驗環境win10+python3.6+pycharm5.0,主要內容如下:

tkinter

這個就不用多說了,python自帶的GUI開發標准庫,對於開發小型簡單的應用來說,完全可以了,開源、跨平台,使用起來非常方便,下面我簡單測試一下,主要代碼如下:

點擊運行程序,效果如下,一個窗口一個Label標簽:

easygui

這個是基於tkinter的一個窗口GUI庫,可以快速創建窗口對話框,包括常見的登陸對話框、注冊對話框等,下面我簡單介紹一下這個庫的安裝和使用:

1.首先,安裝easygui,這個直接在cmd窗口輸入安裝命令「pipinstalleasygui」就行,如下:

2.安裝完成後,我們就可以直接編寫代碼進行測試了,主要代碼如下,非常簡單:

點擊運行這個程序,效果如下:

kivy

這是一個跨平台的GUI應用程序開發庫,可以用來開發安卓、蘋果應用,一套程序,可以處處運行,下面我簡單介紹一下這個庫的安裝和使用:

1.首先,安裝kivy,這個直接按官方教程安裝就行,如下:

2.安裝完成後,就可以直接編寫代碼進行測試了,主要代碼如下,非常簡單:

點擊運行程序,效果如下,這里你可以將其打包為手機應用,安裝到手機上:

wxpython

這也是一個免費、跨平台的PythonGUI開發庫,相比較前面的tkinter來說,功能更為強大,控制項也更多,下面我簡單介紹一下這個庫的安裝和使用:

1.首先,安裝wxpython,這個也直接在cmd窗口輸入命令「pipinstallwxpython」就行,如下:

2.安裝完成後,我們就可以直接編寫相關代碼進行測試了,主要代讓枯碼如下,非常簡單,一個簡單的文本編輯器:

點擊運行這個程序,效果如下:

pyqt

這個Qt的一個Python介面庫,藉助於Qt強大的用戶界面,Python也可以快速開發出GUI程序,組件更多,也更方便,只要你有一定的Qt基礎,很快就能掌握這個庫的使用,下面我簡單介紹一下這個庫的安裝和使用:

1.首先,安裝pyqt,這個直接在cmd窗口輸入安裝命令「pipinstallpyqt5」就行,如下,安裝需要稍微等待一會兒:

2.安裝完成後,我們就可以直接編寫代碼進行測試了,如下,一個簡坦消洞單的計算器:

點擊運行這個程序,效果如下:

至此,我們就介紹完了這5個PythonGUI庫。總的來說,這5個庫使用起來都非常不錯,如果你的應用界面比較簡單,功能要求不高,可以選擇tkinter和easygui,如果界面比較復雜,功能要求比較復雜,可以考慮使用wxpython或pyqt,當然,你也可以使用其他GUI庫,像pygame等,根據實際項目需求而定,網上也有相關資料和教程,感興趣的話,可以搜一下,希望以上分享的內容能對你有所幫助吧,也歡迎大家評論、留言。

Ⅵ python哪些gui庫比較好用呢

tk和qt

tk自帶的 簡單
qt第三方的 強大 跨平台

Ⅶ python圖形界面開發用什麼

作為Python開發者,你遲早都會用到圖形用戶界面來開發應用。本文將推薦一些 Python GUI 框架,希望對你有所幫助。Python 的 UI 開發工具包 Kivy(推薦學習:Python視頻教程)
Kivy是一個開源工具包能夠讓使用相同源代碼創建的程序能跨平台運行。它主要關注創新型用戶界面開發,如:多點觸摸應用程序。Kivy還提供一個多點觸摸滑鼠模擬器。當前支持的平台包括:Linux、Windows、Mac OS X和Android。
Kivy擁有能夠處理動畫、緩存、手勢、繪圖等功能。它還內置許多用戶界面控制項如:按紐、攝影機、表格、Spder和樹形控制項等。
Python 的 GUI 開發工具 Flexx
Flexx 是一個純 Python 工具包,用來創建圖形化界面應用程序。其使用 Web 技術進行界面的渲染。你可以用 Flexx 來創建桌面應用,同時也可以導出一個應用到獨立的 HTML 文檔。因為使用純 Python 開發,所以 Flexx 是跨平台的。只需要有 Python 和瀏覽器就可以運行。如果是使用桌面模式運行,推薦使用 Firefox 。
Qt庫的Python綁定 PyQt
PyQt是Qt庫的Python版本。PyQt3支持Qt1到Qt3。 PyQt4支持Qt4。它的首次發布也是在1998年,但是當時它叫 PyKDE,因為開始的時候SIP和PyQt沒有分開。PyQt是用SIP寫的。PyQt 提供 GPL版和商業版。
Python圖形開發包 wxPython
wxPython 是 Python 語言的一套優秀的 GUI 圖形庫,允許 Python 程序員很方便的創建完整的、功能鍵全的 GUI 用戶界面。 wxPython 是作為優秀的跨平台 GUI 庫 wxWidgets 的 Python 封裝和 Python 模塊的方式提供給用戶的。
就如同Python和wxWidgets一樣,wxPython也是一款開源軟體,並且具有非常優秀的跨平台能力,能夠運行在32位windows、絕大多數的Unix或類Unix系統、Macintosh OS X上。
Tk圖形用戶界面 Tkinter
Tkinter(也叫Tk介面)是Tk圖形用戶界面工具包標準的Python介面。Tk是一個輕量級的跨平台圖形用戶界面(GUI)開發工具。Tk和Tkinter可以運行在大多數的Unix平台、Windows、和Macintosh系統。
Tkinter 由一定數量的模塊組成。Tkinter位於一個名為_tkinter(較早的版本名為tkinter)的二進制模塊中 。Tkinter包含了對Tk的低 級介面模塊,低級介面並不會被應用級程序員直接使用,通常是一個共享庫(或DLL),但是在一些情況下它也被Python解釋器靜態鏈接。
Pywin32
Windows Pywin32允許你像VC一樣的形式來使用PYTHON開發win32應用。代碼風格可以類似win32 sdk,也可以類似MFC,由你選擇。如果你仍不放棄vc一樣的代碼過程在python下,那麼這就是一個不錯的選擇。
Python圖形界面開發包 PyGTK
PyGTK讓你用Python輕松創建具有圖形用戶界面的程序.底層的GTK+提供了各式的可視元素和功能,如果需要,你能開發在GNOME桌面系統運行的功能完整的軟體.
PyGTK真正具有跨平台性,它能不加修改地,穩定運行各種操作系統之上,如Linux,Windows,MacOS等.除了簡單易用和快速的原型開發能力外,PyGTK還有一流的處理本地化語言的獨特功能.
用python快速開發絢麗桌面程序 pyui4win
pyui4win是一個開源的採用自繪技術的界面庫。支持C++和python。用它可以很容易實現QQ和360安全衛士這樣的絢麗界面。而且,pyui4win有所見即所得界面設計器,讓C++開發人員和python開發人員直接用
設計工具設計界面,而不用關心界面如何生成和運行,可以顯著縮短界面開發時間。在pyui4win中,界面甚至可以完全交給美工去處理,開發人員可以只負責處理業務邏輯,把開發人員徹底從繁雜的界面處理中解放出來。
更多Python相關技術文章,請訪問Python教程欄目進行學習!以上就是小編分享的關於python圖形界面開發用什麼的詳細內容希望對大家有所幫助,更多有關python教程請關注環球青藤其它相關文章!

閱讀全文

與python最好的圖形實現gui相關的資料

熱點內容
viper4android安卓60 瀏覽:485
java軟體源碼 瀏覽:159
空氣壓縮機的類型 瀏覽:352
centos圖形命令行界面切換 瀏覽:237
新京報新聞APP什麼時候有的 瀏覽:818
華為手機文件夾重命名空白 瀏覽:742
通俗理解螞蟻演算法 瀏覽:555
俠盜獵車手怎麼注冊伺服器 瀏覽:341
去商場吃飯預約什麼app 瀏覽:776
nginx不能解析php 瀏覽:135
安卓系統如何轉換中文 瀏覽:316
小米手機用什麼下載非官方app 瀏覽:760
linux修改readonly 瀏覽:32
演算法時代我們能做什麼 瀏覽:928
牛津英語搭配詞典pdf 瀏覽:284
慧連a6怎麼連接安卓 瀏覽:235
python使用什麼編譯器最好 瀏覽:52
小程序編譯藍屏 瀏覽:947
程序員賽車的gif 瀏覽:413
購買新車能用到什麼app 瀏覽:775