加载数据库?

时间:2011-03-20 00:56:57

标签: python mysql wxpython

我的问题是我在连接MySQL数据库时如何做某事? 为了更清楚:让我说我尝试连接到数据库:

db = MySQLdb.connect(host = "testhost",user ="testuser", passwd ="testpw", db = "testdb")

嗯,通常情况下,当主机不是localhost时,它通常需要加载一点,当发生这种情况时,应用程序“冻结”(我正在使用wxPython)。现在,我想要的是,而不是“冻结”,它会显示代表“加载”的东西,它可能是图像,文本,无关紧要,而不是冻结。还有,闪屏怎么样?据我所知,我所做的只是一些闪屏,在X时间后点击它时会消失。我真的不知道如何利用它来加载资源,例如MySQL数据库。我最后一次尝试使用splashscreen加载MySQL数据库,它实际上先加载,然后它显示了splashscreen(lol)。 感谢。

4 个答案:

答案 0 :(得分:2)

感谢您的帮助,我得到了一个答案,一个更具体的答案,用于wxPython。我按照这个简单的例子使它工作:

import wx
import thread
from time import sleep

class MainFrame(wx.Frame):

    def __init__(self, parent):
        wx.Frame.__init__(self, parent)

        self.label = wx.StaticText(self, label="Ready")
        self.btn = wx.Button(self, label="Start")
        self.gauge = wx.Gauge(self)

        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(self.label, proportion=1, flag=wx.EXPAND)
        sizer.Add(self.btn, proportion=0, flag=wx.EXPAND)
        sizer.Add(self.gauge, proportion=0, flag=wx.EXPAND)

        self.SetSizerAndFit(sizer)

        self.Bind(wx.EVT_BUTTON, self.onButton)

    def onButton(self, evt):
        self.btn.Enable(False)
        self.gauge.SetValue(0)
        self.label.SetLabel("Running")
        thread.start_new_thread(self.longRunning, ())

    def onLongRunDone(self):
        self.gauge.SetValue(100)
        self.label.SetLabel("Done")
        self.btn.Enable(True)

    def longRunning(self):
        """This runs in a different thread.  Sleep is used to simulate a long running task."""
        sleep(3)
        wx.CallAfter(self.gauge.SetValue, 20)
        sleep(5)
        wx.CallAfter(self.gauge.SetValue, 50)
        sleep(1)
        wx.CallAfter(self.gauge.SetValue, 70)
        sleep(10)
        wx.CallAfter(self.onLongRunDone)

if __name__ == "__main__":
    app = wx.PySimpleApp()
    app.TopWindow = MainFrame(None)
    app.TopWindow.Show()
    app.MainLoop()

从这里开始:http://wiki.wxpython.org/LongRunningTasks,希望这会有所帮助:)。

答案 1 :(得分:1)

如果您的程序需要同时执行两项操作,那么使用多个线程是一种很好的方法。在您的情况下,您有一个GUI,您希望保持响应,并且您有一个要连接的数据库。您需要在单独的线程中执行数据库工作,而不是在处理GUI事件的线程上;这将保持GUI在连接时工作。我担心我不能告诉你如何在Python中编写多线程代码,但我认为谷歌是你的朋友。

答案 2 :(得分:1)

有关如何使用线程模块编写多线程Python程序的示例,请参阅

http://www.devshed.com/c/a/Python/Basic-Threading-in-Python/1/

和官方文件:

http://docs.python.org/library/threading.html

答案 3 :(得分:1)

在这种情况下,线程真的会有所帮助 看看这个:http://themattreid.com/wordpress/2010/08/30/easy-python-threading-mysql-connections/