繁体   English   中英

带有 MySQLdb 的 Python Tkinter 列表框

[英]Python Tkinter listbox with MySQLdb

这是我在 python 中的第一个程序,我正在尝试创建一个程序,该程序将 MySql 地址簿与星号服务器连接并进行呼叫。 “星号代码部分”没问题,我稍后会添加,但问题是我在 Tkinter 中有一个列表框,我想用从 mysqldb 查询中检索到的值填充它。 我只能向列表框添加一个值,但如果我打印结果是正确的。 我该如何解决这个问题? 我想我将不得不做一个 for 循环。 稍后我将不得不知道如何从列表中选择一个值并将其存储在变量中。

from Tkinter import *
import MySQLdb
root = Tk()
root.title("PyCall")
myContainer = Frame(root)
myContainer.pack(side=TOP, expand=YES, fill=BOTH)

db = MySQLdb.connect("localhost",port=3306, user="root", passwd="mypass", db="test" )
cursor = db.cursor()

cursor.execute("SELECT * FROM utenti")
db.commit()

numrows = int(cursor.rowcount)
for x in range(0,numrows):
    row = cursor.fetchone()
    print row[1]

listbox = Listbox(root)
listbox.pack()
listbox.insert(END, row[1])

root.mainloop()
db.close()

如果这是您的第一个 Python 程序,那么您就有了一个良好的开端! 您的问题确实与 MySQL 关系不大,而且您似乎对此处理得很好,所以我将不理会它,只关注您遇到的 Tkinter 问题。 无论如何,我没有要测试的 MySQL 数据库:)

在 GUI 应用程序中,至少在 Tkinter 中,使用 Tk 根框架作为应用程序的主容器来设置您自己的应用程序类通常是一个好主意。 这样做的原因是 GUI 总是有点手足无措,它们只是真实应用程序数据的门面,而真实数据需要某个地方存在。 通过创建自己的应用程序类,您可以通过self拥有该数据的家。

好吧,无聊的东西说够了,让我们来构建一些东西:

import Tkinter


class Application(Tkinter.Frame):
    def __init__(self, master):
        Tkinter.Frame.__init__(self, master)
        self.master.minsize(width=256, height=256)
        self.master.config()
        self.pack()

        self.main_frame = Tkinter.Frame()

        self.some_list = [
            'One',
            'Two',
            'Three',
            'Four'
        ]

        self.some_listbox = Tkinter.Listbox(self.main_frame)

        # bind the selection event to a custom function
        # Note the absence of parentheses because it's a callback function
        self.some_listbox.bind('<<ListboxSelect>>', self.listbox_changed)
        self.some_listbox.pack(fill='both', expand=True)
        self.main_frame.pack(fill='both', expand=True)

        # insert our items into the list box
        for i, item in enumerate(self.some_list):
            self.some_listbox.insert(i, item)

        # make a label to show the selected item
        self.some_label = Tkinter.Label(self.main_frame, text="Welcome to SO!")
        self.some_label.pack(side='top')

        # not really necessary, just make things look nice and centered
        self.main_frame.place(in_=self.master, anchor='c', relx=.5, rely=.5)

    def listbox_changed(self, *args, **kwargs):
        selection_index = self.some_listbox.curselection()
        selection_text = self.some_listbox.get(selection_index, selection_index)
        self.some_label.config(text=selection_text)

root = Tkinter.Tk()
app = Application(root)
app.mainloop()

希望这会有所帮助,并享受构建 GUI 的乐趣!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM