今天回答了幾個和 tkinter 相關的問題,都是和界面,控件,事件相關,結合這段時間都在手機答題, 題庫查詢太麻煩。就做了這個例子。
本例子用到 Tkinter 庫。 包含Tkinter 的 Label , Entry , Button , Text 還有相關事件。 完成題庫的查詢顯示功能。
控件大小自適應界面變化。
數據包含100道題目。
# encoding: utf-8
"""
@author: seakingx
@contact: [email protected]
@version: 1.0
@file: doex.py
@time: 2020/3/19 0019 14:39
說明 簡單查題工具
"""
import tkinter as tk
from tkinter import messagebox
on_hit = False
class MainBox:
def __init__(self):
self.AppName = "刷題【好好學習 天天向上】"
self.size = '800x600'
self.datalist = []
self.init_data()
def init_data(self):
f = open('qgtk/qgtk.txt', encoding='utf8')
txt_list = f.readlines()
f.close()
t_i = 0
t_text = ""
t_item = []
t_list = []
for t in txt_list:
if t.strip() == "":
continue
if t.find("答案") >= 0:
t_i = t_i + 1
t_item.append(t_text.replace("\t", ""))
t_item.append(t.replace("\t", ""))
# t_list.append(t_item)
self.datalist.append(t_item)
t_text = ""
t_item = []
else:
t_text = t_text + t
# self.datalist = t_list[:]
def window_begin(self):
begin = tk.Tk()
begin.title(self.AppName)
begin.geometry(self.size)
key_input = tk.Entry(begin, font=('微軟雅黑', 16))
key_input.place(relx=0.025, y=20, height=40, relwidth=0.50)
def bksearch(ev = None):
key_str = key_input.get()
# print("查詢{}".format(key_str))
text_list.delete("1.0", tk.END)
find_cnt = 0
for t in self.datalist:
if t[0].find(key_str)>0:
find_cnt = find_cnt + 1
text_list.insert("end",t[0])
text_list.insert("end", t[1])
if find_cnt == 0:
text_list.insert("end", "沒有找到匹配的題目")
info_str.set("沒有找到匹配的題目")
else:
info_str.set("找到{}個題目".format(find_cnt))
key_input.delete(0, "end")
button = tk.Button(begin, text='查詢', command=bksearch)
button.place(relx=0.55, y=20, height=40, relwidth=0.10)
info_str = tk.StringVar()
info = tk.Label(begin, textvariable = info_str )
info.place(relx=0.68, y=20, height=40, relwidth=0.30)
key_input.bind("<Return>", bksearch)
text_list = tk.Text(begin, font=('微軟雅黑', 11))
text_list.place(relx=0.025, rely=0.2, relheight=0.75, relwidth=.95)
# 返回
def callback():
if messagebox.askokcancel("退出", "是否退出{}?".format(self.AppName)):
begin.destroy()
begin.protocol("WM_DELETE_WINDOW", callback)
begin.mainloop()
if __name__=="__main__":
window = MainBox()
window.window_begin()
運行界面:
程序(包含100道題目)打包地址: