帮我用tkinter设计一款带有登录系统和可供重复查询的数据库的调查问卷,在登陆界面要求输入账号及密码,成功后载入数据库页面,在数据库页面可以选择查询数据或选择跳转至调查问卷页面,在调查问卷可以选择是否将结果输入数据库
时间: 2024-05-05 17:22:04 浏览: 184
好的,让我们开始设计这个应用程序。首先,我们需要导入必要的模块和库:
```python
import tkinter as tk
from tkinter import messagebox
import sqlite3
```
然后,我们可以定义一个函数来创建和连接到数据库:
```python
def create_database():
conn = sqlite3.connect('survey.db')
c = conn.cursor()
c.execute('''CREATE TABLE IF NOT EXISTS survey_results
(id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
age INTEGER NOT NULL,
gender TEXT NOT NULL,
feedback TEXT NOT NULL)''')
conn.commit()
conn.close()
```
此函数将创建一个名为“survey.db”的数据库,并在其中创建一个名为“survey_results”的表。此表将包含以下列:id、name、age、gender和feedback。
接下来,我们可以定义一个函数来验证用户登录:
```python
def validate_login():
username = username_entry.get()
password = password_entry.get()
if username == 'admin' and password == 'admin123':
login_window.destroy()
db_window()
else:
messagebox.showerror("Error", "Invalid username or password")
```
此函数将获取用户名和密码输入,并将其与预定义的用户名和密码进行比较。如果验证成功,则将关闭登录窗口并打开数据库窗口。否则,将显示错误消息框。
现在让我们设计登录窗口:
```python
def login_window():
global login_window, username_entry, password_entry
login_window = tk.Toplevel()
login_window.title("Login")
tk.Label(login_window, text="Username").grid(row=0, column=0)
username_entry = tk.Entry(login_window)
username_entry.grid(row=0, column=1)
tk.Label(login_window, text="Password").grid(row=1, column=0)
password_entry = tk.Entry(login_window, show="*")
password_entry.grid(row=1, column=1)
tk.Button(login_window, text="Login", command=validate_login).grid(row=2, column=0, columnspan=2)
```
此函数将创建一个新的窗口,并将其标题设置为“Login”。它将在窗口中添加用户名和密码的标签和输入框,以及一个登录按钮。当用户单击登录按钮时,它将调用validate_login()函数。
接下来,让我们设计数据库窗口:
```python
def db_window():
global db_window
db_window = tk.Toplevel()
db_window.title("Database")
tk.Button(db_window, text="Survey", command=survey_window).pack()
tk.Button(db_window, text="View Data", command=view_data).pack()
```
此函数将创建一个新的窗口,并将其标题设置为“Database”。它将添加两个按钮:一个用于打开调查问卷窗口,另一个用于打开查询数据窗口。
接下来,我们可以设计调查问卷窗口:
```python
def save_data():
name = name_entry.get()
age = age_entry.get()
gender = gender_var.get()
feedback = feedback_entry.get('1.0', tk.END)
conn = sqlite3.connect('survey.db')
c = conn.cursor()
c.execute("INSERT INTO survey_results (name, age, gender, feedback) VALUES (?, ?, ?, ?)",
(name, age, gender, feedback))
conn.commit()
conn.close()
messagebox.showinfo("Success", "Data saved successfully")
def survey_window():
global survey_window, name_entry, age_entry, gender_var, feedback_entry
survey_window = tk.Toplevel()
survey_window.title("Survey")
tk.Label(survey_window, text="Name").grid(row=0, column=0)
name_entry = tk.Entry(survey_window)
name_entry.grid(row=0, column=1)
tk.Label(survey_window, text="Age").grid(row=1, column=0)
age_entry = tk.Entry(survey_window)
age_entry.grid(row=1, column=1)
tk.Label(survey_window, text="Gender").grid(row=2, column=0)
gender_var = tk.StringVar(value="Male")
tk.Radiobutton(survey_window, text="Male", variable=gender_var, value="Male").grid(row=2, column=1)
tk.Radiobutton(survey_window, text="Female", variable=gender_var, value="Female").grid(row=2, column=2)
tk.Label(survey_window, text="Feedback").grid(row=3, column=0)
feedback_entry = tk.Text(survey_window, height=10, width=30)
feedback_entry.grid(row=3, column=1, columnspan=2)
tk.Button(survey_window, text="Save Data", command=save_data).grid(row=4, column=0, columnspan=3)
```
此函数将创建一个新的窗口,并将其标题设置为“Survey”。它将包含一些文本标签和输入框,以便用户可以输入其调查问卷答案。它还将包含一个“Save Data”按钮,当用户单击该按钮时,它将调用save_data()函数将调查数据保存到数据库中。
最后,我们可以设计用于查询数据的窗口:
```python
def view_data():
conn = sqlite3.connect('survey.db')
c = conn.cursor()
c.execute("SELECT * FROM survey_results")
results = c.fetchall()
conn.close()
view_window = tk.Toplevel()
view_window.title("View Data")
scrollbar = tk.Scrollbar(view_window)
scrollbar.pack(side=tk.RIGHT, fill=tk.Y)
data_listbox = tk.Listbox(view_window, yscrollcommand=scrollbar.set)
data_listbox.pack(fill=tk.BOTH, expand=1)
for result in results:
data_listbox.insert(tk.END, result)
scrollbar.config(command=data_listbox.yview)
```
此函数将连接到数据库并检索所有调查数据。它将创建一个新的窗口,并将其标题设置为“View Data”。它将包含一个列表框,其中包含从数据库中检索的所有数据。用户可以使用滚动条滚动列表。
阅读全文