Tôi có giao diện tkinter nơi tôi cần hiển thị một số kết quả truy vấn và tôi cần người dùng có thể sửa đổi cột và gửi kết quả. Hiện nay để kéo các truy vấn tôi đang làm một cái gì đó như thế này:Kết quả truy vấn SQL bằng tkinter
conn = connection_info_goes_here
cur = conn.cursor()
cur.execute(query_goes_here)
Và đây là câu hỏi của tôi:
SELECT id, reviewer, task, num_seconds, start_time, end_time
FROM hours
WHERE DATE(start_time) = '2014-12-18'
AND reviewer = 'john'
Các lĩnh vực mà người dùng cần phải sửa đổi là num_seconds
(chỉ số). Câu hỏi của tôi là, làm cách nào để làm cho kết quả truy vấn hiển thị trong lưới và làm cách nào để tôi thực hiện một trong các trường có thể sửa đổi bằng nút để gửi thay đổi?
Thông tin bổ sung: Tôi đã thực hiện việc này theo cách rất lộn xộn bằng cách sử dụng exec()
và tạo biến theo chương trình cho từng trường. Nó trở nên rất dài và khó hiểu và tôi thực sự nghĩ rằng phải có một cách tốt hơn và dễ dàng hơn để làm điều này.
Mọi trợ giúp đều được đánh giá cao. Cảm ơn!!
Cập nhật nhanh: vì đây được đặt ở trạng thái giữ, tôi sẽ thêm một hình ảnh của một cái gì đó tương tự như những gì tôi đang tìm kiếm:
Các giá trị trong nhãn nhập cảnh phải thay thế các giá trị trong cột ở bên phải khi tôi tải chúng trở lại DB.
Khi tôi nói rằng tôi đã làm điều này một cách lộn xộn, là bởi vì tôi đã làm (cách duy nhất tôi có thể nghĩ ra):
def cor_window():
corrections = Tk()
corrections.title("Corrections")
corrections_frame = ttk.Frame(corrections)
cor_values = []
count=0
cor_count=0
for x in results:
count2=0
for y in results[count]:
if count2 == 3:
exec('int' + str(cor_count) + '=tkinter.StringVar')
exec('int' + str(cor_count) + '_entry = ttk.Entry(corrections, width=20, textvariable=int' + str(cor_count) + ')')
exec('int' + str(cor_count) + '_entry.grid(column=count2, row=count+2)')
cor_count = cor_count+1
cor_values.append('int' + str(cor_count) + '_entry')
ttk.Label(corrections, width=20, anchor=CENTER, relief=SUNKEN, borderwidth=1, text= results[count][count2]).grid(column=count2+1, row=count+2)
elif count2 > 3:
ttk.Label(corrections, width=20, anchor=CENTER, relief=SUNKEN, borderwidth=1, text= results[count][count2]).grid(column=count2+1, row=count+2)
else:
ttk.Label(corrections, width=20, anchor=CENTER, relief=SUNKEN, borderwidth=1, text= results[count][count2]).grid(column=count2, row=count+2)
count2=count2+1
count=count+1
ttk.Button(corrections, text="Done!", command=upload_cor).grid(column=0, row=1)
đâu results
là danh sách có chứa kết quả truy vấn và upload_cor
là chức năng sẽ tải lên các thay đổi cho DB. Vì tôi đã sử dụng exec
, ngay cả khi người dùng sửa đổi hộp nhập, tôi không thể sử dụng .get()
để nhận được những gì người dùng đã nhập. Khi tôi thử sử dụng .get()
, tôi chỉ nhận được None
ngay cả khi đã nhập nội dung nào đó vào hộp nhập.
Tôi chỉ cần một phương pháp khác để làm điều này, một lần nữa, mọi ý tưởng đều được hoan nghênh.
num_seconds sẽ sử dụng Mục nhập (hoặc danh sách ID mục nhập) và phần còn lại sẽ là Nhãn. Bạn cũng sẽ phải liên kết số hàng với bản ghi và so sánh từng mục nhập với giá trị ban đầu để xem những hàng nào đã thay đổi, nhưng nếu "id" là duy nhất thì nó phải đơn giản.Nhập thông tin widget http://effbot.org/tkinterbook/entry.htm –