[PyQt] QMainWindow freezes

šãñ niceguysan at gmail.com
Mon Apr 15 12:05:12 BST 2013


make sure u have something like this when u call QMainwindow

def main(argv):

    app = QtGui.QApplication(argv)
    yourMainWin = MainWindUI()
    yourMainWin.show()
    app.exec_()

if __name__ == "__main__":
    sys.exit(main(sys.argv))


On Mon, Apr 15, 2013 at 4:27 PM, <rennnyyy at nem-pro.de> wrote:

> Hey guys,
>
> I have a problem with my project. First of all I want to describe what I'm
> trying to create and after that I explain the problems I have.
>
> The project hooks all keyboard events that are done with the help of
> "pyHook" (I know that sounds like hacking now, but the software will only
> be used by myself). If specific keys are pressed they will be added to a
> dictionary which contains information about the time, when the key was
> pressed. Furthermore I wrote a GUI with the help of pyQt, which should
> display the difference between the current time and the time, when the key
> was pressed (more or less a timer that). To keep the displayed time
> difference up-to-date I have a infinite QTimer which call a function that
> recalculates the difference and display it in a QLabel. Here's my
> sourcecode:
>
> class KeyboardHook(threading.Thread):
>     def __init__(self):
>           threading.Thread.__init__(self)
>           self.start()
>
>     def OnKeyboardEvent(self, event):
>         key = event.Key
>         if key in ('F1', 'F2', 'F3', 'F4', 'F5', 'F6', 'F7', 'F8', 'F9',
> 'F10'):
>            gui.OnAddKey(key)
>         return True
>
>     def run(self):
>         hookManager = pyHook.HookManager()
>         hookManager.KeyDown = self.OnKeyboardEvent
>         hookManager.HookKeyboard()
>         pythoncom.PumpMessages()
>
> class GUI(QtGui.QMainWindow):
>     def __init__(self):
>         QtGui.QMainWindow.__init__(self)
>         self.resize(460,276)
>         self.setWindowTitle('LoL Timer')
>
>         # Add KeyboardHook
>         self.keyboardHook = KeyboardHook()
>
>         # Timers
>         self.timers = {}
>
>         # Timer
>         self.timer = QtCore.QTimer();
>         QtCore.QObject.connect(self.timer, QtCore.SIGNAL("timeout()"),
> self.OnUpdate)
>         self.timer.start(100)
>
>         # Textsfields
>         self.textfields = {}
>         for i in xrange(1, 11):
>             tmp = QtGui.QLabel(QtCore.QString('-'), self)
>
>             if i % 2 == 1:
>                 tmp.move(30, 30 + ((i - 1)/ 2) * 40)
>             else:
>                 tmp.move(230, 30 + ((i - 1)/ 2) * 40)
>             self.textfields['F%s' %(i)] = tmp
>
>     def OnAddKey(self, key):
>         if key in self.timers:
>             del self.timers[key]
>         else:
>             self.timers[key] = time.time()
>
>     def OnUpdate(self):
>         for i in ('F1', 'F2', 'F3', 'F4', 'F5', 'F6', 'F7', 'F8', 'F9',
> 'F10'):
>             try:
>
> self.textfields[i].setText(QtCore.QString(str(self.timers[i])))
>             except:
>                 self.textfields[i].setText(QtCore.QString('-'))
>
> The problem I've got: Sometimes I press one of the specific keys the GUI
> freezes. First I thought about a problem with the different threads, trying
> to access the same variable at one time. But when I changed the OnUpdate
> function to
>
>     def OnUpdate(self):
>         for i in ('F1', 'F2', 'F3', 'F4', 'F5', 'F6', 'F7', 'F8', 'F9',
> 'F10'):
>             test = self.timers[i]
>             try:
>                 pass
>             except:
>                 pass
>
> the GUI never freezed (of course it did not update the timers). The
> variables that are accessed are the same, so I think the threads are not
> the problem.
>
> Do you have any idea, what I'm doing wrong? Or is my whole concept of
> writing this software wrong?
>
> Thanks in advance.
>
>
> Rennnyyy
>
>
> PS: The software is designed for helping me in a game, where I need
> accurate timers. That's why I need a global keyboard hook, to get key
> events even if my software has not the main focus.
>
>
>
>
> _______________________________________________
> PyQt mailing list    PyQt at riverbankcomputing.com
> http://www.riverbankcomputing.com/mailman/listinfo/pyqt
>



-- 
**

[image: San's personal blog] <http://feeds.feedburner.com/SanLuthraBlog>

*
*
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.riverbankcomputing.com/pipermail/pyqt/attachments/20130415/bc1782c8/attachment.html>


More information about the PyQt mailing list