Pythonマルチスレッドアプリケーション

5718 ワード

内容:
2つのインタフェースを設計し、それぞれログインと学生情報入力機能を実現する.
データベースには、ユーザー情報と学生情報を格納するためのUersとstudentの2つのテーブルが作成されます.
ログインインタフェースにユーザー名とパスワードを入力し、入力内容に応じて「ユーザー名が存在しない」、「パスワードエラー」などのエラーメッセージを表示します.正しくログインすると、学生情報入力画面に入ります.
学生情報入力インタフェースは、テキストボックス、ラジオボタン、チェックボックス、リストボックスなどのコンポーネントを総合的に利用して学生番号、名前を入力し、所在系、性別などの情報を選択し、「入力」ボタンをクリックして学生表に記入し、インタフェースのリストボックスにすべての学生情報を表示します.
モジュールと方法の紹介:
TkinterはPythonの標準GUIライブラリです.PythonはTkinterを使用してGUIアプリケーションを迅速に作成できます.
Tkinterを使用してGUIプログラムを作成するには:
1、Tkinterモジュールのインポート
2、コントロールの作成
3、このコントロールのマスターを指定します.つまり、このコントロールがどれに属するかを指定します.
4、GM(geometry manager)にコントロールが生まれたことを伝える.
Tkinterは、ボタン、ラベル、テキストボックスなど、GUIアプリケーションで使用されるさまざまなコントロールを提供しています.これらのコントロールは、通常、コントロールまたはコンポーネントと呼ばれます.
このプログラムで使用するコンポーネントは次のとおりです.
Buttonボタンコントロール;プログラムにボタンを表示します.
Entry入力コントロール;簡単なテキストの内容を表示
Labelラベルコントロール;テキストとビットマップを表示できます
Listboxリストボックスコントロール;Listboxウィンドウウィジェットでは、ユーザーに文字列リストを表示するために使用されます.
tkMessageBoxは、アプリケーションのメッセージボックスを表示するために使用されます.
考え方:
ユーザーログインデータベースインタフェース:ユーザー名とパスワードの入力を行うentryを2つ作成します.次にbuttonを使用して、カスタム関数を使用して入力したユーザー名とパスワードをチェックし、まずデータベースusersテーブルの内容を照会し、すべてのユーザー名をリストmzに配置し、すべてのパスワードをテーブルmmに配置し、入力したユーザー名がmzにあるかどうかを判断し、いなければ、ポップアップユーザー名が存在しないかどうかを判断し、そうでなければパスワードがmmにあるかどうかを判断し、ポップアップ学生情報入力インタフェースが存在しない場合、パスワードエラーがポップアップされます.学生情報入力インタフェース:各種コンポーネントを用いてインタフェースを確立し、データベースに接続し、入力した情報をstudentテーブルに挿入し、テーブルstudentをクエリーし、listboxにすべての学生情報を表示し、グローバル変数xとローカル変数yを定義するには、xは入力情報のエントリ数を記録し、yはクエリーのいくつかの情報を表すために使用され、xがyに等しいときにlistboxにクエリーの結果を挿入する.リストボックスに表示されている学生情報は挿入しなくてもいいからです.コードは次のとおりです.
#coding=utf-8
import tkinter
import tkinter.messagebox
import tkinter
import tkinter.messagebox
import tkinter.ttk
import sqlite3
x=0
con=sqlite3.connect("users.db")
root = tkinter.Tk()
def Luru():
    root = tkinter.Tk()
    root.title('Selection widgets')
    root['height'] = 400
    root['width'] = 400
    varName = tkinter.StringVar()
    varName.set('')
    varSno=tkinter.StringVar()
    varSno.set('')
    labelName = tkinter.Label(root, text='Name:',justify=tkinter.RIGHT,width=50)
    labelName.place(x=10, y=5, width=50, height=20)
    
    entryName = tkinter.Entry(root, width=120,textvariable=varName)
    entryName.place(x=70, y=5, width=120, height=20)
    
    labelSno = tkinter.Label(root, text='Sno:', justify=tkinter.RIGHT, width=50)
    labelSno.place(x=10, y=40, width=50, height=20)
    
    entrySno = tkinter.Entry(root, width=100,textvariable=varSno)
    entrySno.place(x=70, y=40, width=100, height=20)    
    
    labelDept = tkinter.Label(root, text='Dept:', justify=tkinter.RIGHT, width=50)
    labelDept.place(x=200, y=40, width=40, height=20)
    dept=['cs','ma','en']
    comboDept = tkinter.ttk.Combobox(root, width=40,values=tuple(dept))
    comboDept.place(x=260, y=40, width=40, height=20)
    
    labelSex = tkinter.Label(root, text='Sex:', justify=tkinter.RIGHT, width=50)
    labelSex.place(x=10, y=70, width=50, height=20)
    
    sex = tkinter.IntVar()
    sex.set(1)
    
    radioMan = tkinter.Radiobutton(root,variable=sex,value=1,text='Man')
    radioMan.place(x=70, y=70, width=50, height=20)
    
    radioWoman = tkinter.Radiobutton(root,variable=sex,value=0,text='Woman')
    radioWoman.place(x=130, y=70, width=70, height=20)
    
    def addInformation():
        global x
        x+=1
        y=0
        stu=[]
        stu.append(entrySno.get())
        stu.append(entryName.get())
        if sex.get()==1:
            stu.append(" ")
        else:
            stu.append(" ")
        stu.append(comboDept.get())
        con.execute("insert into student values(?,?,?,?)",stu)
        result=con.execute("select * from student")
        for i in result:
            y+=1
            if x==y:
                listboxStudents.insert(0,i)
            
    buttonAdd = tkinter.Button(root, text='  ',width=40, command=addInformation)
    buttonAdd.place(x=130, y=100, width=40, height=20)
    
    
    listboxStudents = tkinter.Listbox(root, width=300)
    listboxStudents.place(x=10, y=130, width=300, height=200)
    
    root.mainloop()        

varName = tkinter.StringVar()
varName.set('')
varPwd = tkinter.StringVar()
varPwd.set('')

labelName = tkinter.Label(root, text='User Name:', justify=tkinter.RIGHT, width=80)

labelName.place(x=10, y=5, width=80, height=20)

entryName = tkinter.Entry(root, width=80,textvariable=varName)
entryName.place(x=100, y=5, width=80, height=20)

labelPwd = tkinter.Label(root, text='User Pwd:', justify=tkinter.RIGHT, width=80)
labelPwd.place(x=10, y=30, width=80, height=20)

entryPwd = tkinter.Entry(root, show='*',width=80, textvariable=varPwd)
entryPwd.place(x=100, y=30, width=80, height=20)

def login():
    
    mz=[]
    mm=[]
    name=entryName.get()
    pwd=entryPwd.get()
    result=con.execute("select name,password from users")
    for i in result:
        mz.append(i[0])
        mm.append(i[1])
    if name in mz:
        if pwd in mm:
            Luru()
        else:
            tkinter.messagebox.showinfo(title='Python tkinter',message='    ')
    else:
        tkinter.messagebox.showinfo(title='Python tkinter',message='      ')
buttonOk = tkinter.Button(root, text='Login', command=login)
buttonOk.place(x=30, y=70, width=50, height=20)

def cancel():
    
    varName.set('')
    varPwd.set('')
buttonCancel = tkinter.Button(root, text='Cancel', command=cancel)
buttonCancel.place(x=90, y=70, width=50, height=20)

root.mainloop()