使用WX包實現一個簡易的古詩文欣賞軟體
阿新 • • 發佈:2018-12-02
寫在前面
用python的WX包來實現一個簡易的古詩文閱覽軟體,幫助自己欣賞古詩文,軟體如下:
所有顯示的古詩文均來自爬蟲欄中的《python爬取古詩文網站詩文一欄的所有詩詞》爬到的資訊,現在將他們隨機展示出來。
開始正文
1.展示匯入的包
在此,主要用到3個包,分別為生成圖形框的包,操作MYSQL的包和生成隨機數的包
import wx
import pymysql
import random
2.生成圖形框,並繫結事件
在此,常見了一個類,將之後的所有操作都做成類的方法,比較方便
生成圖形框
- 將類繼承wx,Frame
- 生成一個Panel
- 初始化資料庫
- 建立兩個StaticText,用於顯示詩詞的名稱和作者
- 建立一個TextCtrl,顯示內容
- 建立三個BoxSizer,設定詩詞名稱,作者,內容的位置展示
- 繫結事件,將視窗獲取到滑鼠左鍵點選為切換下一首詩的指令
程式碼如下:
class Gushiw(wx.Frame): def __init__(self,parent): self.sql = Gushiw_databases() wx.Frame.__init__(self,parent,title='古詩文鑑賞') bkg = wx.Panel(self) self.title_name = wx.StaticText(bkg,wx.LEFT) self.author_name = wx.StaticText(bkg,wx.ALIGN_CENTER) self.contexts = wx.TextCtrl(bkg,style=wx.TE_MULTILINE|wx.ALIGN_CENTER|wx.TE_READONLY) name_text = "靜夜思" self.title_name.SetLabel(name_text) h1box = wx.BoxSizer(wx.HORIZONTAL) # h1box.AddStretchSpacer(1) h1box.Add(self.title_name,proportion=0,flag=wx.EXPAND|wx.LEFT|wx.ALIGN_CENTER,border=20) author = '李白' self.author_name.SetLabel(author) h2box = wx.BoxSizer(wx.HORIZONTAL) h2box.AddStretchSpacer(2) h2box.Add(self.author_name,proportion=1,flag=wx.EXPAND|wx.ALIGN_CENTER_HORIZONTAL,border=20) context = "床前明月光,\n疑是地上霜,\n舉頭望明月,\n低頭思故鄉。" self.contexts.SetValue(context) h3box = wx.BoxSizer(wx.VERTICAL) h3box.Add(h1box,proportion=0,flag=wx.EXPAND|wx.ALIGN_CENTER_HORIZONTAL,border=20) h3box.Add(h2box,proportion=0,flag=wx.EXPAND,border=10) h3box.Add(self.contexts,proportion=1,flag=wx.ALL|wx.EXPAND|wx.LEFT|wx.BOTTOM|wx.RIGHT,border=20) bkg.SetSizer(h3box) bkg.Bind(event=wx.EVT_LEFT_DOWN, handler=self._next_text)
3.更新資訊和連結資料庫
將發生滑鼠左鍵點選事件時,會執行_next_text介面,這是會連線資料庫,並,讀出一條資料,拿來顯示
def _update_info(self,title,author,contexts): self.title_name.SetLabel(title) self.author_name.SetLabel(author) self.contexts.SetValue(contexts) def _next_text(self,event): self.connect_sql() def connect_sql(self): data = self.sql.read_data() print(data) self._update_info(data[1],data[2],data[3])
4.資料庫類
class Gushiw_databases():
def __init__(self):
self.db = pymysql.connect(
host = '127.0.0.1',
user = 'root',
password = 'root',
database = 'gushiw',
port = 3306
)
self.cursor = self.db.cursor()
def read_data(self):
id = random.randint(127,4017)
print(id)
sql = 'select * from gushiw_table where id = %s'
value = self.cursor.execute(sql,(id,))
value = self.cursor.fetchall()
return value[0]
5.主函式
def main():
app = wx.App()
text = Gushiw(parent=None)
text.Show()
app.MainLoop()