如何将MySQL数据库中的数据插入到Python中的wx.ComboBox中

1 投票
1 回答
2787 浏览
提问于 2025-04-17 12:27

我在wxpython里创建了一个面板,并且有一个数据库(MySQLdb)。然后我从数据库中选择了一些数据,想把这些数据放到一个下拉框(wx.Combobox)里。接着,如果选择的是A选项或B选项,我还想从数据库中再插入一些其他的数据到一个列表框(listbox)里。下面是我的代码:

import MySQLdb
import sys
import wx

APP_SIZE_X = 661
APP_SIZE_Y = 319

class MyFrame(wx.Frame):
    def __init__(self, parent, id, title):
        wx.Frame.__init__(self, parent, id, title, wx.DefaultPosition, 
        size=(APP_SIZE_X, APP_SIZE_Y))

        panel = wx.Panel(self, -1,style=wx.SUNKEN_BORDER)

        sel="Make your choice"
        wx.StaticText(panel, -1,sel,(15,10))

            db=MySQLdb.connect(host="localhost",use_unicode="True",
                    charset="utf-8",
        user="youruser",passwd="somepwd",db="choicedb")

        cursor=db.cursor()
        sql="""SELECT name from choicetb"""

        cursor.execute(sql)

        rows = cursor.fetchall()

        for row in rows:

                  print row[1]



            sampleList = ["A choice", "B choice", "C choice"]#The data from db
            wx.ComboBox(panel, -1, "A choice", (15, 30), 
            wx.DefaultSize,sampleList, wx.CB_DROPDOWN)

        math="Selected items"
        wx.StaticText(panel, -1,math,(10,100))

        listBox = wx.ListBox(panel, -1, (10, 130), (230, 120),
        ' ', wx.LB_SINGLE)


        exitbutton =wx.Button(panel,-1, label="Quit", pos=(300, 230))
        exitbutton.Bind(wx.EVT_BUTTON, self.OnQuit)
        self.Centre()

    def OnQuit(self, e):

        self.Close()

class MyApp(wx.App):
    def OnInit(self):
        frame = MyFrame(None, -1, 'form1.py')
        frame.Show(True)
        self.SetTopWindow(frame)
        return True

app = MyApp(0)
app.MainLoop()

我想知道如何把我在下拉框中选择的选项插入进去,我试过一些方法,但总是得到最后一个选项。我知道问题出在循环里面,但具体是什么呢?谢谢大家的回答和帮助。

1 个回答

1

把新数据放到一个Python列表里,然后用ListBox或ComboBox的AppendItems(your_list)方法来添加这些数据。这可能是最简单的方法。如果你已经有了一个用于下拉框的列表,你可以这样做:

self.myComboList = ["some", "list"]
for row in rows:
   self.myComboList.Append(row[1])
self.ComboList.sort()
self.myComboBoxWidget.AppendItems(self.ComboList)

像这样应该可以正常工作。

撰写回答