Как выбрать данные списка Python и заполнить их конкретным блоком ввода - pretype

0

Пока все работает правильно, однако я борюсь с получением данных ниже, как только подсвечивается мышью, и однажды нажимает кнопку выбора, чтобы заполнить правильные поля ввода. Это может быть слишком много.

Отображение списка

2-12312 Bob Seesaw Active

4-1212 Jim Beene Off

Поэтому, если я выделил строку Bob Seesaw и нажмите select. 2-12312 будет pretype 'num_input', Bob 'nam_input' и так далее. Для этого я могу ввести новое назначение и обновить базу данных для этой записи. (Я вставил код, свойственный моей инициативе.

from tkinter import *
import pymysql as mdb

from tkinter import ttk
from tkinter import Listbox

def viewroster():
    rosterList.delete(0, "end")

    dbi = mdb.connect("localhost", port=3306, user="user", passwd="pass", db="interactive_db")
    cursor = dbi.cursor()
    cursor.execute("""SELECT number, firstname, surname, assign FROM active_roster""")
    rows=cursor.fetchall()
    dbi.close()
    print (rows)
    for results in rows:
     rosterList.insert("end", results)


 #Input Fields

num_input=StringVar()
num_input=Entry(root,textvariable=num_input)
num_input.grid(row=0,column=1)

ass_input=StringVar()
 ass_input=Entry(root,textvariable=ass_input)
ass_input.grid(row=0,column=3)


 nam_input=StringVar()
 nam_input=Entry(root,textvariable=nam_input)
 nam_input.grid(row=1,column=1)

 sur_input=StringVar()
 sur_input=Entry(root,textvariable=sur_input)
 sur_input.grid(row=1,column=3)

 # This is to select mouse highlighted data 
 rosSelButt=Button(root, text="Select", width=12)
 rosSelButt.grid(row=13, column=0)

-

Number [2-12312]

Firstname    [Bob]  Surname  [Seesaw]  Assign [......] (ready for text)

Я не хочу потерять возможность ввода имени или номера в качестве записи и поиска в базе данных.

Теги:
tkinter

1 ответ

1
Лучший ответ

Listbox дает выбранный элемент как strin, и у меня этот текст формируется в столбцах с

'{:10s}|{:15s}|{:10s}'

поэтому я могу использовать нарезку для получения данных из правильного места и strip() для удаления пробелов.

import tkinter as tk

# --- function ---

def on_selection(event):
    line = event.widget.get(event.widget.curselection())

    e1.delete(0, 'end')
    e2.delete(0, 'end')
    e3.delete(0, 'end')

    e1.insert('end', line[:10].strip())
    e2.insert('end', line[11:26].strip())
    e3.insert('end', line[27:].strip())

# --- main ---

root = tk.Tk()
root.geometry('400x300')

listbox = tk.Listbox(root, font=('monospace', 10), selectbackground='red')
listbox.pack(expand='yes', fill='both')

listbox.insert('end', '{:10s}|{:15s}|{:10s}'.format('2-12312', 'Bob Seesaw', 'Active'))
listbox.insert('end', '{:10s}|{:15s}|{:10s}'.format('4-1212', 'Jim Beene', 'Off'))

listbox.bind('<<ListboxSelect>>', on_selection)

e1 = tk.Entry(root)
e1.pack()

e2 = tk.Entry(root)
e2.pack()

e3 = tk.Entry(root)
e3.pack()

root.mainloop()

Изображение 174551

  • 0
    Святой это здорово - я очень ценю вашу помощь
  • 0
    AttributeError: объект 'tuple' не имеет атрибута 'strip' - это ошибка, которую я получаю для значений базы данных. Я вытащил из трех разных столбцов в таблице Mysql, так что это видно. Если у меня есть только одна ячейка или столбец, он работает нормально, но это не моя ситуация.
Показать ещё 10 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню