我的问题是我在连接MySQL数据库时如何做某事? 为了更清楚:让我说我尝试连接到数据库:
db = MySQLdb.connect(host = "testhost",user ="testuser", passwd ="testpw", db = "testdb")
嗯,通常情况下,当主机不是localhost时,它通常需要加载一点,当发生这种情况时,应用程序“冻结”(我正在使用wxPython)。现在,我想要的是,而不是“冻结”,它会显示代表“加载”的东西,它可能是图像,文本,无关紧要,而不是冻结。还有,闪屏怎么样?据我所知,我所做的只是一些闪屏,在X时间后点击它时会消失。我真的不知道如何利用它来加载资源,例如MySQL数据库。我最后一次尝试使用splashscreen加载MySQL数据库,它实际上先加载,然后它显示了splashscreen(lol)。 感谢。
答案 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/
和官方文件:
答案 3 :(得分:1)
在这种情况下,线程真的会有所帮助 看看这个:http://themattreid.com/wordpress/2010/08/30/easy-python-threading-mysql-connections/