我在简单的 class 中看不到组合框。怎么解决?

I can't see comboboxes in a simple class. How to solve?

我专门为 2 个组合框创建了一个 class,但我看不到它们。我没有收到错误,但是没有显示 2 个组合框。

我不需要整个 window 的 class,但我只需要那 2 个组合框的 class。

我做错了什么?我该如何解决?你能带我来吗?谢谢

import tkinter as tk                    
from tkinter import ttk
import sqlite3
from tkinter import *
  
root = tk.Tk()
root.title("Tab Widget")
root.geometry('230x330')

conn = sqlite3.connect('database')
cursor = conn.cursor()   

class seleziona_squadra():
    def __init__(self):
        self.conn = sqlite3.connect('database')
        self.cursor = self.conn.cursor()

    def fill_voyage(self):
        self.cursor.execute('SELECT DISTINCT campionato FROM BASE_ProssimaGiornata')
        self.result=[row[0] for row in self.cursor]
        return self.result

    def combo_campionato(self, event=None):
        global campionato
        self.val = self.campionato.get()
        self.cursor.execute('SELECT team_home||"-"||team_away FROM BASE_ProssimaGiornata WHERE  Campionato = ?', (self.val,))
        self.values = [row[0] for row in self.cursor] 
        global partita
        self.partita['value'] = self.values
        return self.values

    def seleziona(self, event=None):
        self.select_partita = self.partita.get()
            
        if self.select_partita:
            global squadra_sinistra
            global squadra_destra
            self.squadra_sinistra, self.squadra_destra = self.select_partita.split('-')


    self.campionato=ttk.Combobox(root, width = 25)
    self.campionato['value'] = self.fill_voyage()
    self.campionato.bind('<<ComboboxSelected>>', self.combo_campionato)
    self.campionato.place(x=1, y=1)

    self.partita=ttk.Combobox(root, width = 25)
    self.partita.place(x=1, y=30)
    self.partita.bind('<<ComboboxSelected>>', self.seleziona)

    self.combo_campionato()
    self.seleziona()

root.mainloop()

您的组合框创建代码必须在 class 初始化函数中。然后在您的主代码中,您创建了 class 的一个实例,它自动显示 class 创建的 UI 个元素。一种更简洁的方法是将 class 放在另一个文件中,或者放在代码的末尾或开头。它不必在您的代码中间。

这是代码(我注释掉了导致错误的地方)

import tkinter as tk                    
from tkinter import ttk
import sqlite3
from tkinter import *
  
root = tk.Tk()
root.title("Tab Widget")
root.geometry('230x330')

conn = sqlite3.connect('database')
cursor = conn.cursor()   

class seleziona_squadra():
    def __init__(self):
        self.conn = sqlite3.connect('database')
        self.cursor = self.conn.cursor()

        self.campionato=ttk.Combobox(root, width = 25)
        self.campionato['value'] = self.fill_voyage()
        self.campionato.bind('<<ComboboxSelected>>', self.combo_campionato)
        self.campionato.place(x=1, y=1)

        self.partita=ttk.Combobox(root, width = 25)
        self.partita.place(x=1, y=30)
        self.partita.bind('<<ComboboxSelected>>', self.seleziona)

        self.combo_campionato()
        self.seleziona()

    def fill_voyage(self):
        # self.cursor.execute('SELECT DISTINCT campionato FROM BASE_ProssimaGiornata')
        self.result=[row[0] for row in self.cursor]
        return self.result

    def combo_campionato(self, event=None):
        global campionato
        self.val = self.campionato.get()
        # self.cursor.execute('SELECT team_home||"-"||team_away FROM BASE_ProssimaGiornata WHERE  Campionato = ?', (self.val,))
        self.values = [row[0] for row in self.cursor] 
        global partita
        self.partita['value'] = self.values
        return self.values

    def seleziona(self, event=None):
        self.select_partita = self.partita.get()
            
        if self.select_partita:
            global squadra_sinistra
            global squadra_destra
            self.squadra_sinistra, self.squadra_destra = self.select_partita.split('-')


seleziona_squadra()

root.mainloop()