Я создаю программу IP Configuration, где в одной части мне нужно изменить выбранные строки из моей базы данных, чтобы изменить в них информацию.
Чтобы сделать это, мне нужно создать окно в каждой строке, затем подождать, пока пользователь завершит ввод, прежде чем пользователь нажмет следующую, появится новое окно и будет уничтожено старое окно. .
Вот код, который у меня есть для модуля:
class moddtb(wx.Frame):
def __init__(self, title, parent=None):
global l_a
t = len(l_a)
self.n = 0
self.b = 0
while self.n<t:
while True:
wx.Frame.__init__(self, parent=parent, title=title, size=(1100, 500))
panel = wx.Panel(self)
self.Centre(direction=wx.BOTH)
self.Bind(wx.EVT_CLOSE, self.cls)
print(self.n)
mycursor.execute("SELECT * FROM ip_config WHERE id=%s;", (l_a[self.n],))
new_ip = mycursor.fetchone()
self.n_id = str(new_ip[0])
self.n_hn = str(new_ip[1])
self.n_rl = str(new_ip[2])
self.n_aut = str(new_ip[3])
self.n_ali = str(new_ip[4])
self.n_typ = str(new_ip[5])
self.n_env = str(new_ip[6])
self.n_isc = str(new_ip[7])
self.n_sta = str(new_ip[8])
self.n_vla = str(new_ip[9])
self.n_ip = str(new_ip[10])
self.n_pui = str(new_ip[11])
self.n_gri = str(new_ip[12])
self.n_idr = str(new_ip[13])
self.n_sys = str(new_ip[14])
self.n_aps = str(new_ip[15])
self.n_das = str(new_ip[16])
self.n_phs = str(new_ip[17])
self.n_rac = str(new_ip[18])
self.n_lom = str(new_ip[19])
self.n_phm = str(new_ip[20])
self.n_mod = str(new_ip[21])
self.n_ser = str(new_ip[22])
self.n_prv = str(new_ip[23])
self.n_os = str(new_ip[24])
self.n_war = str(new_ip[25])
self.n_es = str(new_ip[26])
self.n_el = str(new_ip[27])
if self.n_hn is None:
wx.MessageBox('An error has been made, selected row %s is empty. Skipping to next row.' % (self.n_id), 'Creation Error', wx.OK | wx.ICON_ERROR)
continue
f1 = wx.Font(12, wx.DEFAULT, wx.NORMAL, wx.NORMAL, False, "Arial")
f2 = wx.Font(18, wx.DEFAULT, wx.NORMAL, wx.FONTWEIGHT_BOLD, False, "Sergoe UI")
ttllbl = TransparentText(panel, id=wx.ID_ANY, label="Please fill out the information in this form: ", pos=(60,27),
size=(200,50), style=wx.TRANSPARENT_WINDOW, name='transparenttext')
ttllbl.SetFont(f2)
idlbl = TransparentText(panel, id=wx.ID_ANY, label="ID: ", pos=(60,77),
size=(50,50), style=wx.TRANSPARENT_WINDOW, name='transparenttext')
idlbl.SetFont(f1)
idtbx = wx.TextCtrl(panel, id=wx.ID_ANY, value=self.n_id, pos=(150, 77), size=(180,25), style=wx.TE_READONLY)
hnlbl = TransparentText(panel, id=wx.ID_ANY, label="Host Name: ", pos=(60,107),
size=(50,50), style=wx.TRANSPARENT_WINDOW, name='transparenttext')
hnlbl.SetFont(f1)
self.hntbx = wx.TextCtrl(panel, id=wx.ID_ANY, value=self.n_hn, pos=(150, 107), size=(180,25))
rolelbl = TransparentText(panel, id=wx.ID_ANY, label="Role: ", pos=(60,137),
size=(50,50), style=wx.TRANSPARENT_WINDOW, name='transparenttext')
rolelbl.SetFont(f1)
self.roletbx = wx.TextCtrl(panel, id=wx.ID_ANY, value=self.n_rl, pos=(150, 137), size=(180,25))
athlbl = TransparentText(panel, id=wx.ID_ANY, label="Authorize: ", pos=(60,167),
size=(50,50), style=wx.TRANSPARENT_WINDOW, name='transparenttext')
athlbl.SetFont(f1)
self.athtbx = wx.TextCtrl(panel, id=wx.ID_ANY, value=self.n_aut, pos=(150, 167), size=(180,25))
alslbl = TransparentText(panel, id=wx.ID_ANY, label="Alias: ", pos=(60,197),
size=(50,50), style=wx.TRANSPARENT_WINDOW, name='transparenttext')
alslbl.SetFont(f1)
self.alstbx = wx.TextCtrl(panel, id=wx.ID_ANY, value=self.n_ali, pos=(150, 197), size=(180,25))
typlbl = TransparentText(panel, id=wx.ID_ANY, label="Type: ", pos=(60,227),
size=(50,50), style=wx.TRANSPARENT_WINDOW, name='transparenttext')
typlbl.SetFont(f1)
self.typtbx = wx.TextCtrl(panel, id=wx.ID_ANY, value=self.n_typ, pos=(150, 227), size=(180,25))
envlbl = TransparentText(panel, id=wx.ID_ANY, label="Enviroment: ", pos=(60,257),
size=(50,50), style=wx.TRANSPARENT_WINDOW, name='transparenttext')
envlbl.SetFont(f1)
self.envtbx = wx.TextCtrl(panel, id=wx.ID_ANY, value=self.n_env, pos=(150, 257), size=(180,25))
isiplbl = TransparentText(panel, id=wx.ID_ANY, label="ISCI IP: ", pos=(60,287),
size=(50,50), style=wx.TRANSPARENT_WINDOW, name='transparenttext')
isiplbl.SetFont(f1)
self.isiptbx = wx.TextCtrl(panel, id=wx.ID_ANY, value=self.n_isc, pos=(150, 287), size=(180,25))
staiplbl = TransparentText(panel, id=wx.ID_ANY, label="Static IP: ", pos=(60,317),
size=(50,50), style=wx.TRANSPARENT_WINDOW, name='transparenttext')
staiplbl.SetFont(f1)
self.staiptbx = wx.TextCtrl(panel, id=wx.ID_ANY, value=self.n_sta, pos=(150, 317), size=(180,25))
vliplbl = TransparentText(panel, id=wx.ID_ANY, label="VLAN: ", pos=(60,347),
size=(50,50), style=wx.TRANSPARENT_WINDOW, name='transparenttext')
vliplbl.SetFont(f1)
self.vliptbx = wx.TextCtrl(panel, id=wx.ID_ANY, value=self.n_vla, pos=(150, 347), size=(180,25))
maniplbl = TransparentText(panel, id=wx.ID_ANY, label="Management IP: ", pos=(360,77),
size=(50,50), style=wx.TRANSPARENT_WINDOW, name='transparenttext')
maniplbl.SetFont(f1)
self.maniptbx = wx.TextCtrl(panel, id=wx.ID_ANY, value=self.n_ip, pos=(500, 77), size=(180,25), style=wx.TE_READONLY)
pubiplbl = TransparentText(panel, id=wx.ID_ANY, label="Public IP: ", pos=(360,107),
size=(50,50), style=wx.TRANSPARENT_WINDOW, name='transparenttext')
pubiplbl.SetFont(f1)
self.pubiptbx = wx.TextCtrl(panel, id=wx.ID_ANY, value=self.n_pui, pos=(500, 107), size=(180,25))
grpiplbl = TransparentText(panel, id=wx.ID_ANY, label="Group IP: ", pos=(360,137),
size=(50,50), style=wx.TRANSPARENT_WINDOW, name='transparenttext')
grpiplbl.SetFont(f1)
self.grpiptbx = wx.TextCtrl(panel, id=wx.ID_ANY, value=self.n_gri, pos=(500, 137), size=(180,25))
idriplbl = TransparentText(panel, id=wx.ID_ANY, label="IDRAC IP: ", pos=(360,167),
size=(50,50), style=wx.TRANSPARENT_WINDOW, name='transparenttext')
idriplbl.SetFont(f1)
self.idriptbx = wx.TextCtrl(panel, id=wx.ID_ANY, value=self.n_idr, pos=(500, 167), size=(180,25))
sysszlbl = TransparentText(panel, id=wx.ID_ANY, label="System Size: ", pos=(360,197),
size=(50,50), style=wx.TRANSPARENT_WINDOW, name='transparenttext')
sysszlbl.SetFont(f1)
self.syssztbx = wx.TextCtrl(panel, id=wx.ID_ANY, value=self.n_sys, pos=(500, 197), size=(180,25))
appszlbl = TransparentText(panel, id=wx.ID_ANY, label="Application Size: ", pos=(360,227),
size=(50,50), style=wx.TRANSPARENT_WINDOW, name='transparenttext')
appszlbl.SetFont(f1)
self.appsztbx = wx.TextCtrl(panel, id=wx.ID_ANY, value=self.n_aps, pos=(500, 227), size=(180,25))
dtszlbl = TransparentText(panel, id=wx.ID_ANY, label="Data Size: ", pos=(360,257),
size=(50,50), style=wx.TRANSPARENT_WINDOW, name='transparenttext')
dtszlbl.SetFont(f1)
self.dtsztbx = wx.TextCtrl(panel, id=wx.ID_ANY, value=self.n_das, pos=(500, 257), size=(180,25))
physzlbl = TransparentText(panel, id=wx.ID_ANY, label="Physical Size: ", pos=(360,287),
size=(50,50), style=wx.TRANSPARENT_WINDOW, name='transparenttext')
physzlbl.SetFont(f1)
self.physztbx = wx.TextCtrl(panel, id=wx.ID_ANY, value=self.n_phs, pos=(500, 287), size=(180,25))
rdconlbl = TransparentText(panel, id=wx.ID_ANY, label="Raid Config: ", pos=(360,317),
size=(50,50), style=wx.TRANSPARENT_WINDOW, name='transparenttext')
rdconlbl.SetFont(f1)
self.rdcontbx = wx.TextCtrl(panel, id=wx.ID_ANY, value=self.n_rac, pos=(500, 317), size=(180,25))
lgmemszlbl = TransparentText(panel, id=wx.ID_ANY, label="Logical Memory \nSize: ", pos=(360,347),
size=(50,50), style=wx.TRANSPARENT_WINDOW, name='transparenttext')
lgmemszlbl.SetFont(f1)
self.lgmemsztbx = wx.TextCtrl(panel, id=wx.ID_ANY, value=self.n_lom, pos=(500, 347), size=(180,25))
phymemszlbl = TransparentText(panel, id=wx.ID_ANY, label="Physical Memory \nSize: ", pos=(700,77),
size=(50,50), style=wx.TRANSPARENT_WINDOW, name='transparenttext')
phymemszlbl.SetFont(f1)
self.phymemsztbx = wx.TextCtrl(panel, id=wx.ID_ANY, value=self.n_phm, pos=(840, 77), size=(180,25))
mdllbl = TransparentText(panel, id=wx.ID_ANY, label="Model: ", pos=(700,117),
size=(50,50), style=wx.TRANSPARENT_WINDOW, name='transparenttext')
mdllbl.SetFont(f1)
self.mdltbx = wx.TextCtrl(panel, id=wx.ID_ANY, value=self.n_mod, pos=(840, 117), size=(180,25))
srlnumlbl = TransparentText(panel, id=wx.ID_ANY, label="Serial Number: ", pos=(700,147),
size=(50,50), style=wx.TRANSPARENT_WINDOW, name='transparenttext')
srlnumlbl.SetFont(f1)
self.srlnumtbx = wx.TextCtrl(panel, id=wx.ID_ANY, value=self.n_ser, pos=(840, 147), size=(180,25))
prvcpulbl = TransparentText(panel, id=wx.ID_ANY, label="Processor/VCPU: ", pos=(700,177),
size=(50,50), style=wx.TRANSPARENT_WINDOW, name='transparenttext')
prvcpulbl.SetFont(f1)
self.prvcputbx = wx.TextCtrl(panel, id=wx.ID_ANY, value=self.n_prv, pos=(840, 177), size=(180,25))
oslbl = TransparentText(panel, id=wx.ID_ANY, label="OS: ", pos=(700,207),
size=(50,50), style=wx.TRANSPARENT_WINDOW, name='transparenttext')
oslbl.SetFont(f1)
self.ostbx = wx.TextCtrl(panel, id=wx.ID_ANY, value=self.n_os, pos=(840, 207), size=(180,25))
wrtylbl = TransparentText(panel, id=wx.ID_ANY, label="Warranty: ", pos=(700,237),
size=(50,50), style=wx.TRANSPARENT_WINDOW, name='transparenttext')
wrtylbl.SetFont(f1)
self.wrtytbx = wx.TextCtrl(panel, id=wx.ID_ANY, value=self.n_war, pos=(840, 237), size=(180,25))
eoslbl = TransparentText(panel, id=wx.ID_ANY, label="End of Support: ", pos=(700,267),
size=(50,50), style=wx.TRANSPARENT_WINDOW, name='transparenttext')
eoslbl.SetFont(f1)
self.eostbx = wx.TextCtrl(panel, id=wx.ID_ANY, value=self.n_es, pos=(840, 267), size=(180,25))
eollbl = TransparentText(panel, id=wx.ID_ANY, label="End of Life: ", pos=(700,297),
size=(50,50), style=wx.TRANSPARENT_WINDOW, name='transparenttext')
eollbl.SetFont(f1)
self.eoltbx = wx.TextCtrl(panel, id=wx.ID_ANY, value=self.n_el, pos=(840, 297), size=(180,25))
if self.b==1:
b3a = wx.Bitmap("button3 a.png")
b3b = wx.Bitmap("button3 b.png")
b4a = wx.Bitmap("button4 a.png")
b4b = wx.Bitmap("button4 b.png")
dtbbtnc = btn.GenBitmapButton(panel, wx.ID_ANY, bitmap=b3a, pos=(700,330), style=wx.NO_BORDER|wx.BU_EXACTFIT,size=(147, 62))
dtbbtnc.SetBitmapSelected(b3b)
dtbbtnc.Bind(wx.EVT_BUTTON, self.cc)
dtbbtnd = btn.GenBitmapButton(panel, wx.ID_ANY, bitmap=b4a, pos=(880,330), style=wx.NO_BORDER|wx.BU_EXACTFIT,size=(147, 62))
dtbbtnd.SetBitmapSelected(b4b)
dtbbtnd.Bind(wx.EVT_BUTTON, self.cls2)
self.Show()
else:
b8a = wx.Bitmap("button8 a.png")
b8b = wx.Bitmap("button8 b.png")
b4a = wx.Bitmap("button4 a.png")
b4b = wx.Bitmap("button4 b.png")
dtbbtnc = btn.GenBitmapButton(panel, wx.ID_ANY, bitmap=b8a, pos=(880,330), style=wx.NO_BORDER|wx.BU_EXACTFIT,size=(147, 62))
dtbbtnc.SetBitmapSelected(b8b)
dtbbtnc.Bind(wx.EVT_BUTTON, self.cc)
dtbbtnd = btn.GenBitmapButton(panel, wx.ID_ANY, bitmap=b4a, pos=(700,330), style=wx.NO_BORDER|wx.BU_EXACTFIT,size=(147, 62))
dtbbtnd.SetBitmapSelected(b4b)
dtbbtnd.Bind(wx.EVT_BUTTON, self.cls)
self.Show()
if t-1==self.n or t==1:
self.b=1
if moddtb.IsShown(self)==False:
break
self.n+=1
def cls2(self, event):
frame = dspdtb()
self.Destroy()
def cls(self, event):
nf = MainPage()
nf.Show()
self.Destroy()
def cc(self, event):
cr_a = self.hntbx.GetValue()
print ("Value: \"",cr_a,"\"")
if cr_a != None or cr_a !="" or cr_a !=" " or cr_a !=" " :
id = self.n_id
ip = self.n_ip
cr_b = self.roletbx.GetValue()
cr_c = self.athtbx.GetValue()
cr_d = self.alstbx.GetValue()
cr_e = self.typtbx.GetValue()
cr_f = self.envtbx.GetValue()
cr_g = self.isiptbx.GetValue()
cr_h = self.staiptbx.GetValue()
cr_i = self.vliptbx.GetValue()
cr_j = self.pubiptbx.GetValue()
cr_k = self.grpiptbx.GetValue()
cr_l = self.idriptbx.GetValue()
cr_m = self.syssztbx.GetValue()
cr_n = self.appsztbx.GetValue()
cr_o = self.dtsztbx.GetValue()
cr_p = self.physztbx.GetValue()
cr_q = self.rdcontbx.GetValue()
cr_r = self.lgmemsztbx.GetValue()
cr_s = self.phymemsztbx.GetValue()
cr_t = self.mdltbx.GetValue()
cr_u = self.srlnumtbx.GetValue()
cr_v = self.prvcputbx.GetValue()
cr_w = self.ostbx.GetValue()
cr_x = self.wrtytbx.GetValue()
cr_y = self.eostbx.GetValue()
cr_z = self.eoltbx.GetValue()
mycursor.execute("UPDATE ip_config SET host_name=%s, role=%s, authorize=%s, alias=%s, type=%s, enviroment=%s, isci_ip=%s, static_ip=%s, vlan=%s, public_ip=%s, group_ip=%s, idrac_ip=%s, system_size=%s, application_size=%s, data_size=%s, physical_size=%s, raid_config=%s, logical_mem=%s, physical_mem=%s, model=%s, serial_number=%s, `processor/vcpu`=%s, os=%s, warranty=%s, end_of_support=%s, end_of_life=%s WHERE id=%s;", (cr_a, cr_b, cr_c, cr_d, cr_e, cr_f, cr_g, cr_h, cr_i, cr_j, cr_k, cr_l, cr_m, cr_n, cr_o, cr_p, cr_q, cr_r, cr_s, cr_t, cr_u, cr_v, cr_w, cr_x, cr_y, cr_z, id))
if self.b==1:
LoadThread()
loada = load()
loada.ShowModal()
wx.MessageBox('A new connection has been created, ', 'Connection Created', wx.OK)
frame = MainPage()
self.Destroy()
else:
wx.MessageBox('An error has been made, please fill out the host name before you continue...', 'Creation Error', wx.OK | wx.ICON_ERROR)
frame = MainPage()
self.Destroy()
Проблема с этим модулем, однако, две вещи:
- Если я запускаю эту программу, происходит бесконечный цикл, что приводит к бесконечному циклу открытых окон.
- Даже без странной проблемы с бесконечным циклом, если я исправлю ее, имея в виду только первый цикл, то он будет просто отображать все окна одновременно, а не отображать их одно за другим. Создание путаницы внутри программы.
Есть ли способ отображать окна модификации по одному в строке без необходимости отображать их все сразу?
Любая помощь приветствуется. Заранее спасибо.