как добавить значение в другой выпадающий список из запроса выбора после выбора из первого выпадающего списка - PullRequest
0 голосов
/ 08 июня 2019

я пытаюсь сделать выделение в комбинированном ящике1, чтобы заполнить комбинированный список 2 данными из базы данных sqlite3

я сделал комбинированный список1, но я не знаю, почему он не работает с комбинированным списком2, я пыталсяmake event = none ошибка исчезла, но значение в combobox2

import tkinter as tk 
from tkinter import ttk 
import sqlite3

class SchoolProjict(tk.Tk):
    def __init__(self, *args, **kwargs):
        tk.Tk.__init__(self, *args, **kwargs)
        container = tk.Frame(self)
        container.pack(side = "top", fill = "both", expand = True)
        container.grid_rowconfigure(0, weight = 1)
        container.grid_columnconfigure(0, weight = 1)
        self.frames = {}
        for F in (StartPage,):
            frame = F(container, self)
            self.frames[F] = frame
            frame.grid(row = 0, column = 0, sticky = "nsew")
        self.show_frame(StartPage)

    def show_frame(self, cont):
        frame = self.frames[cont]
        frame.tkraise()

    def get_page(self, classname):
        for page in self.frames.values():
            if str(page.__class__.__name__) == classname:
                return page
        return None


class StartPage(tk.Frame):
    def __init__(self, parent, controller):
        self.controller = controller
        tk.Frame.__init__(self, parent)
        lablel = tk.Label(self, text = "Stuident Info")
        lablel.grid(row = 1, columnspan = 3, pady=5, padx=5)
        lable2 = tk.Label(self, text = "gread")
        lable2.grid(row = 2, column = 2, pady=5, padx=5)
        lable3 = tk.Label(self, text = "class")
        lable3.grid(row = 3, column = 2, pady=5, padx=5)
        lable4 = tk.Label(self, text = "Stuident Name")
        lable4.grid(row = 4, column = 2, pady=5, padx=5)
        self.number = tk.StringVar()
        self.combobox1 = ttk.Combobox(self, width = 15)
        self.combobox1.bind("<<ComboboxSelected>>", self.comboclass)
        self.combobox1['value'] = self.combogread()
        self.combobox1.grid(row = 2, column = 1, pady=5, padx=5)
        self.combobox2 = ttk.Combobox(self, width = 15)
        self.combobox2['value'] = self.comboclass()
        self.combobox2.grid(row = 3, column = 1, pady=5, padx=5)


    def combogread(self):
        self.conn = sqlite3.connect("exeldata.db")
        self.cur = self.conn.cursor()
        self.cur = self.conn.execute('SELECT rowid, GradNumber FROM gradelevel')

        result = []

        for row in self.cur.fetchall():
            result.append(row[1])

        return result

    def comboclass(self, event = None):
        greadid = self.combobox1.get() 
        self.conn = sqlite3.connect("exeldata.db")
        self.cur = self.conn.cursor()
        self.cur = self.conn.execute('SELECT rowid, GradNumber FROM gradelevel WHERE GradNumber = (?)', (greadid,))
        result = []
        for row in self.cur.fetchall():
            result.append(row[0])    

        self.cur = self.conn.execute('SELECT rowid , ClassNumb FROM classnumber  WHERE GradID = (?)', (str(result),))
        result = []
        for row in self.cur.fetchall():
            result.append(row[0])

        return result



app = SchoolProjict()
app.mainloop()

моя база данных составляет 3 таблицы с отношением один ко многим, одно для первого класса, для классов на каждом уровне и информация об ученике для каждого класса

1 Ответ

0 голосов
/ 09 июня 2019

Проблема в том, что функция comboclass() на самом деле не обновляет значения Combobox, это легко исправить.

Вам просто нужно создать функциюэто обновляет значения.В основном это просто строка кода: self.combobox2['value'] = self.comboclass()

Так что это будет код, который вам нужно изменить / добавить:

class StartPage(tk.Frame):
    def __init__(self, parent, controller):
        """All Init Code Here"""

        self.combobox1 = ttk.Combobox(self, width = 15)
        self.combobox1.bind("<<ComboboxSelected>>", self.update_combo)  # Changed binds command to the update the combobox
        self.combobox1['value'] = self.combogread()
        self.combobox1.grid(row = 2, column = 1, pady=5, padx=5)

        self.combobox2 = ttk.Combobox(self, width = 15)
        self.combobox2['value'] = self.comboclass()
        self.combobox2.grid(row = 3, column = 1, pady=5, padx=5)

    def update_combo(self, event=None):  # New function to update the combobox
        self.combobox2['value'] = self.comboclass()

Combobox 2 теперь должен обновляться всякий раз, когдаВы выбираете опцию для Combobox 1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...