1. 程式人生 > >使用WX包實現一個簡易的古詩文欣賞軟體

使用WX包實現一個簡易的古詩文欣賞軟體

寫在前面

用python的WX包來實現一個簡易的古詩文閱覽軟體,幫助自己欣賞古詩文,軟體如下:
古詩文欣賞軟體
所有顯示的古詩文均來自爬蟲欄中的《python爬取古詩文網站詩文一欄的所有詩詞》爬到的資訊,現在將他們隨機展示出來。

開始正文

1.展示匯入的包

在此,主要用到3個包,分別為生成圖形框的包,操作MYSQL的包和生成隨機數的包

import wx
import pymysql
import random
2.生成圖形框,並繫結事件

在此,常見了一個類,將之後的所有操作都做成類的方法,比較方便
生成圖形框

  1. 將類繼承wx,Frame
  2. 生成一個Panel
  3. 初始化資料庫
  4. 建立兩個StaticText,用於顯示詩詞的名稱和作者
  5. 建立一個TextCtrl,顯示內容
  6. 建立三個BoxSizer,設定詩詞名稱,作者,內容的位置展示
  7. 繫結事件,將視窗獲取到滑鼠左鍵點選為切換下一首詩的指令
    程式碼如下:
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()
6.再次執行展示

在這裡插入圖片描述