Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Python > Freeze with wxpython on python 2.3 or python 2.4 on Win32 with Thread

Reply
Thread Tools

Freeze with wxpython on python 2.3 or python 2.4 on Win32 with Thread

 
 
Tsubasa[Hokage]
Guest
Posts: n/a
 
      01-27-2005
Hello i have a problem with thread and wxpython on WIN32.

With this script :

I would like to SetValue to my gauge widget in a thread.
I can GetValue without a hitch but if I SetValue it freezing.

Try following script and go to AF-Tools Menu and click install

Normally in the install thread, I wrote "yo" in the console and I
SetValue of the gauge passed to the thread.

from wxPython.wx import *
from wxPython.wizard import *
from os import *
#import os
#import win32wnet, win32netcon
#import wmi
#import win32api
#import _winreg
import time
#import win32com,win32com.client
import sys
import shutil
import dircache
import struct, socket
from optparse import OptionParser

#import thread
import threading
#import Queue

__auteur__="FLFRSPA"


def map_drive(local, remote, username, password):
###self.map_drive("Z:",
"\\\L00438\c$",r"localhost\administrator","")# ##
return win32wnet.WNetAddConnection2(win32netcon.RESOURCET YPE_DISK,local,
remote, None,username, password,0)

class InstallThread(threading.Thread):
###La classe recoit
login,password,workstation,checkboxdomaine,domaine ,self.log,self.g1,package
def __init__(self,login,password,workstation,checkboxd omaine,domaine,log,gauge,package):
threading.Thread.__init__(self)
self.result = None
self.i=0
self.login=login
self.password=password
self.workstation=workstation
self.package=package
self.checkboxdomaine=checkboxdomaine
self.domaine=domaine
self.log=log
self.gauge=gauge

def run(self):
self.result=1
print "yo"
self.gauge.SetValue(10)
self.result=1
return

class main_PyXrunAS(wx.Frame):
def __init__(self, *args, **kwds):
kwds["style"] = wx.DEFAULT_FRAME_STYLE
wx.Frame.__init__(self, *args, **kwds)
sizer = wxBoxSizer(wxVERTICAL)
self.SetSizer(sizer)
menuBar = wx.MenuBar()
# 1st menu from left
menu1 = wx.Menu()
#menu1.Append(101, "&Options", "Options de la LoFBOX")
menu1.Append(102, "&Quitter", "Quitter")
#self.Bind(wx.EVT_MENU, self.quit, id=102)
menu1.AppendSeparator()
menuBar.Append(menu1, "&Fichier")
# 2st menu from left
menu2 = wx.Menu()
menu2.Append(201, "&Test Connection", "Effectue un test de
connection sur la machine distante")
#self.Bind(wx.EVT_MENU, self.aide_dialog, id=201)
self.Bind(wx.EVT_MENU, self.query_freespace, id=201)
menu2.Append(202, "&Reboot Distant", "Effectue le reboot d'une
machine")
self.Bind(wx.EVT_MENU, self.query_reboot, id=202)
#self.Bind(wx.EVT_MENU, self.Apropos, id=202)
menu2.Append(202, "&Wake On Lan", "Effectue le démarrage
distant d'une machine")
menu2.Append(203, "&Install", "Install le package
selectionné")
self.Bind(wx.EVT_MENU, self.install_thread, id=203)
menu2.AppendSeparator()
menuBar.Append(menu2, "&AF-Tools")
self.SetMenuBar(menuBar)
###Logo Titre
self.remlogo = wx.StaticBitmap(self, -1,
wx.Bitmap("data/remote_logo.jpg", wx.BITMAP_TYPE_ANY),pos=(5,5))
sizer.AddWindow(self.remlogo, 0, wxALIGN_CENTRE|wxALL, 5)
sizer.AddWindow(wxStaticLine(self, -1), 0, wxEXPAND|wxALL, 5)
###Creation de la liste des packages
self.a=dircache.listdir('Package/')
self.a=self.a[:] # Copy the return value so we can change 'a'
t1=wx.Choice(self, -1, (60, 60), choices = self.a)
self.tc1 = t1
self.Bind(wx.EVT_CHOICE, self.Evtpackage, t1)
t1.Bind(wx.EVT_TEXT, self.Evtpackage)
l1 = wx.StaticText(self, -1, "Package: ",pos=(5,60))
l1.SetBackgroundColour("white")
###Jauge d'evolution
self.g1 = wx.Gauge(self, -1, 50, (220, 210), (190, 25))
self.g1.SetBezelFace(3)
self.g1.SetShadowWidth(3)
self.g1.SetBackgroundColour("White")
###Label progression
label_pro = wx.StaticText(self, -1, "Progression:
",pos=(220,190))
label_pro.SetBackgroundColour("white")
###Multiline log
label_log = wx.StaticText(self, -1, "Log: ",pos=(220,60))
label_log.SetBackgroundColour("white")
self.log = wx.TextCtrl(self, -1, "", size=(250,
100),pos=(220,80),
style = wx.TE_MULTILINE
#| wx.TE_RICH
| wx.TE_RICH2
)
###Setmachine
self.workstation = wx.TextCtrl(self, -1, "", size=(105,
-1),pos=(60,100))
label_workstation = wx.StaticText(self, -1, "Poste:
",pos=(6,100))
label_workstation.SetBackgroundColour("white")
#self.workstation.SetInsertionPoint(0)
self.workstation.Bind(wx.EVT_TEXT, self.EvtChar)
###Bouton pour tester la connection
#self.workstation_connect = wx.Button(self, -1, "Test
Connection", (210,55))
#self.workstation_connect.Disable()
#self.label_freespace = wx.StaticText(self, -1,
"",pos=(270,102))
#self.label_freespace.SetBackgroundColour("white")
#self.Bind(wx.EVT_BUTTON, self.query_freespace,
self.workstation_connect)

#self.Bind(wx.EVT_BUTTON, self.OnButton, b)
###Login/Password/Domain
self.t2 = wx.TextCtrl(self, -1, "", size=(105,
-1),pos=(60,140))
l2 = wx.StaticText(self, -1, "Login: ",pos=(6,142))
l2.SetBackgroundColour("white")
self.t3 = wx.TextCtrl(self, -1, "", size=(105,
-1),pos=(60,180),style=wx.TE_PASSWORD)
l3 = wx.StaticText(self, -1, "Password: ",pos=(6,182))
l3.SetBackgroundColour("white")
self.t5 = wx.TextCtrl(self, -1, "", size=(105,
-1),pos=(60,230))
l4 = wx.StaticText(self, -1, "Domaine: ",pos=(6,230))
self.t5.Disable()
l4.SetBackgroundColour("white")
self.cb1 = wx.CheckBox(self, -1, "Domaine", (60, 210), (90,
20), wx.NO_BORDER)
self.cb1.SetBackgroundColour("white")
self.Bind(wx.EVT_CHECKBOX, self.EvtCheckBox, self.cb1)
self.__set_properties()
self.__do_layout()

def EvtChar(self, event):
pass
return

def Evtpackage(self, event):
pass
return
#print self.workstation.GetValue()
#event.Skip()

def EvtListBox(self, event):
print 'EvtListBox: %s\n' % event.GetString()

def EvtCheckListBox(self, event):
index = event.GetSelection()
label = self.lb.GetString(index)
#status = 'un'
if self.lb.IsChecked(index):
self.list_option.append(label)
else:
self.list_option.remove(label)
print self.list_option
self.lb.SetSelection(index) # so that (un)checking also
selects (moves the highlight)
return


def __set_properties(self):
# begin wxGlade: MyFrame1.__set_properties
#user=win32api.GetUserName()
#self.t4.WriteText('%s' % user)
#self.t4.Disable()
self.SetTitle("AF-Remote-MSI "+__version__)
self.SetBackgroundColour("white")
self.SetSize((490, 350))
# end wxGlade

def __do_layout(self):
# begin wxGlade: MyFrame1.__do_layout
sizer_3 = wx.BoxSizer(wx.VERTICAL)
self.SetAutoLayout(True)
self.SetSizer(sizer_3)
self.Layout()
# end wxGlade

def query_freespace(self,event):
machine=self.workstation.GetValue()
pi=0
try:
c = wmi.WMI (machine)
pi=1
except:
self.log.WriteText(str(sys.exc_info()[1])+" \n")
pi=0
#self.label_freespace.SetLabel("Connection OK: ")
if (pi!=0):
for disk in c.Win32_LogicalDisk (DriveType=3):
self.log.WriteText(self.log.GetValue()+str(disk.Ca ption)+str(int(disk.FreeSpace)/1000000)+
"Mo Libres\n")
return

def query_reboot(self,event):
pi=0
try:
machine=self.workstation.GetValue()
c = wmi.WMI (computer=str(machine),
privileges=["RemoteShutdown"])
pi=1
except:
self.log.WriteText(str(sys.exc_info()[1])+" \n")
pi=0
if (pi!=0):
os = c.Win32_OperatingSystem (Primary=1)[0]
os.Reboot ()
self.log.WriteText("Reboot [OK]")
return

def SendWol(self,event):
if (str(self.mac.GetValue())!="aa-bb-cc-dd-ee \n"):
self.WakeOnLan(self.mac.GetValue())
else:
self.log.WriteText("Erreur adresse mac")
return

def WakeOnLan(self,ethernet_address):
pass

def EvtCheckBox(self, event):
#print 'EvtCheckBox: %d\n' % event.IsChecked()
if (event.IsChecked()==1):
self.t5.Enable()
if (event.IsChecked()==0):
self.t5.Disable()

def OnButton(self, event):

dlg = wx.DirDialog(self, "Choose a directory:",

style=wx.DD_DEFAULT_STYLE|wx.DD_NEW_DIR_BUTTON)
if dlg.ShowModal() == wx.ID_OK:
# This returns a Python list of files that were selected.
paths = dlg.GetPath()
for path in paths:
self.tc1.WriteText('%s' % path)
dlg.Destroy()
return

def Ecrire_batch(self):
#contenu="cscript //H:CScript //S \n"
contenu="xrunas.vbs /profile /user:administrator /pwd????
"+str(self.tc1.GetValue())
#contenu=contenu+" -pw="+input+" -language=F -client=100
-sysname=\"FP1 - Production\""
batch="AFpyxras.bat"
file = open(batch, "w")
file.write(contenu)
file.close()
return

def install_thread(self,event):
subThread2 =
InstallThread(self.t2.GetValue(),self.t3.GetValue( ),self.workstation.GetValue(),self.t5.GetValue(),s elf.cb1,self.log,self.g1,self.a[self.tc1.GetSelection()])
subThread2.start()
subThread2.join()

#result = subThread2.result
#print result

def install_vnc(self,name,time):
pass
return

class GUIThread(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)

def run(self):
class PyXrunAS(wx.App):
def OnInit(self):
wx.InitAllImageHandlers()
frame_2 = main_PyXrunAS(None, -1, "")
self.SetTopWindow(frame_2)
frame_2.Show()
return 1

self.app = PyXrunAS(0)
self.app.MainLoop()

if __name__ == "__main__":
subThread = GUIThread()
subThread.start()
subThread.join()
#subThread.Run()

Can someone help me ?
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
freeze string fails to freeze ??? jwaala.amplify@gmail.com Ruby 5 03-15-2007 11:29 PM
wxPython problem with freeze.py =?iso-8859-1?B?aWFuYXLp?= Python 0 04-05-2006 09:22 PM
RE: [python-win32] simulate DoEvents by python/wxpython Mark Hammond Python 0 10-26-2005 11:15 PM
Freeze with wxpython on python 2.3 or python 2.4 on Win32 with Thread Tsubasa[Hokage] Python 0 01-26-2005 02:16 PM
signaling a ruby thread from a win32 native thread Vincenzo Piombo Ruby 1 05-21-2004 02:43 AM



Advertisments