Python 2.7 Python WX从父帧调用子帧
我正在制作一个与MySQL数据库交互的应用程序,一个表一个表。我创建了主框架,还有3个,一个用于显示表,一个用于插入数据,还有一个用于使用id键删除行。当我启动index.py时,所有3个脚本都会运行,然后是主窗口。我想从菜单中调用用户调用脚本 以下是脚本:Python 2.7 Python WX从父帧调用子帧,python-2.7,wxpython,Python 2.7,Wxpython,我正在制作一个与MySQL数据库交互的应用程序,一个表一个表。我创建了主框架,还有3个,一个用于显示表,一个用于插入数据,还有一个用于使用id键删除行。当我启动index.py时,所有3个脚本都会运行,然后是主窗口。我想从菜单中调用用户调用脚本 以下是脚本: import wx from main import SetupGrid from insert import InsertData from delete import DeleteData class GlavniProzor(wx.
import wx
from main import SetupGrid
from insert import InsertData
from delete import DeleteData
class GlavniProzor(wx.Frame):
def __init__(self, parent):
wx.Frame.__init__(self, parent, -1, "Editor Tabele Setup", size = (800,600))
self.createMenu()
self.CenterOnScreen()
self.Show()
def createMenu(self):
''' Traka menija '''
menubar = wx.MenuBar()
self.SetMenuBar(menubar)
''' Meni Specijalne funkcije '''
menu = wx.Menu()
menubar.Append(menu, '&Specijalne funkcije')
menuitem = wx.MenuItem(menu, wx.ID_ANY, 'Tabela')
#self.Bind(wx.EVT_MENU, self.prikazTabele, menuitem)
menu.AppendItem(menuitem)
menuitem = wx.MenuItem(menu, wx.ID_ANY, 'Unos u tabelu')
# self.Bind(wx.EVT_MENU, self.unosuTabelu, menuitem)
menu.AppendItem(menuitem)
menuitem = wx.MenuItem(menu, wx.ID_ANY, 'Brisanje iz tabele')
# self.Bind(wx.EVT_MENU, self.brisanjeizTabele, menuitem)
menu.AppendItem(menuitem)
menuitem = wx.MenuItem(menu, wx.ID_ANY, 'Izlaz')
# self.Bind(wx.EVT_MENU, self.izlaz, menuitem)
menu.AppendItem(menuitem)
def prikazTabele(self, evt):
dial = SetupGrid(self, -1)
dial.CenterOnParent()
dial.Show()
def unosuTabelu(self, evt):
dial = InsertData(self, -1)
dial.CenterOnParent()
dial.Show()
def brisanjeizTabele(self, evt):
dial = DeleteData(self, -1)
dial.CenterOnParent()
dial.Show()
def izlaz(self, evt):
exit()
app = wx.App(0)
frame = GlavniProzor(None)
app.MainLoop()
这是main.py纸条,显示表格
#! /usr/bin/env python
import wx, MySQLdb, wx.lib.intctrl
import wx.grid as gridlib
ID_SETUP = 1
db = MySQLdb.connect("127.0.0.1", "user", "password", "database")
class SetupGrid(wx.Dialog):
def __init__(self, id, title='Tabela Setup'):
wx.Dialog.__init__(self, id, title, size=(1000, 300))
db = MySQLdb.connect("127.0.0.1", "root", "aaa111bbb", "mysqlsetup")
cursor = db.cursor()
def setupid():
sql = 'SELECT idSetup FROM setup'
cursor.execute(sql)
rezltat = cursor.fetchall()
rezultat2 = []
x = 0
for upis in rezltat:
for polje in upis:
users = str(polje)
rezultat2.append(users)
x += 1
return rezultat2
def setupkomitent():
sql = 'SELECT idKomitent FROM setup'
cursor.execute(sql)
rezltat = cursor.fetchall()
rezultat2 = []
x = 0
for upis in rezltat:
for polje in upis:
users = str(polje)
rezultat2.append(users)
x += 1
return rezultat2
def setupdrzava():
sql = 'SELECT Drzava FROM setup'
cursor.execute(sql)
rezltat = cursor.fetchall()
rezultat2 = []
x = 0
for upis in rezltat:
for polje in upis:
users = str(polje)
rezultat2.append(users)
x += 1
return rezultat2
def setupprg():
sql = 'SELECT Prg FROM setup'
cursor.execute(sql)
rezltat = cursor.fetchall()
rezultat2 = []
x = 0
for upis in rezltat:
for polje in upis:
users = str(polje)
rezultat2.append(users)
x += 1
return rezultat2
def setupprovajder():
sql = 'SELECT Provajder FROM setup'
cursor.execute(sql)
rezltat = cursor.fetchall()
rezultat2 = []
x = 0
for upis in rezltat:
for polje in upis:
users = str(polje)
rezultat2.append(users)
x += 1
return rezultat2
def setupservername():
sql = 'SELECT ServerName FROM setup'
cursor.execute(sql)
rezltat = cursor.fetchall()
rezultat2 = []
x = 0
for upis in rezltat:
for polje in upis:
users = str(polje)
rezultat2.append(users)
x += 1
return rezultat2
def setupdatabasename():
sql = 'SELECT DataBaseName FROM setup'
cursor.execute(sql)
rezltat = cursor.fetchall()
rezultat2 = []
x = 0
for upis in rezltat:
for polje in upis:
users = str(polje)
rezultat2.append(users)
x += 1
return rezultat2
def setupsifarnici():
sql = 'SELECT Sifarnici FROM setup'
cursor.execute(sql)
rezltat = cursor.fetchall()
rezultat2 = []
x = 0
for upis in rezltat:
for polje in upis:
users = str(polje)
rezultat2.append(users)
x += 1
return rezultat2
def setuppromena():
sql = 'SELECT Promena FROM setup'
cursor.execute(sql)
rezltat = cursor.fetchall()
rezultat2 = []
x = 0
for upis in rezltat:
for polje in upis:
users = str(polje)
rezultat2.append(users)
x += 1
return rezultat2
self.idSetup = setupid()
self.idKomitent = setupkomitent()
self.Drzava = setupdrzava()
self.Prg = setupprg()
self.Provajder = setupprovajder()
self.ServerName = setupservername()
self.DataBaseName = setupdatabasename()
self.Sifarnici = setupsifarnici()
self.Promena = setuppromena()
# Define main panel
panel = wx.Panel(self, -1)
vbox = wx.BoxSizer(wx.VERTICAL)
# Define sizers
# Horizontal sizers
SetupTableSizer = wx.BoxSizer(wx.HORIZONTAL)
BtnSizer = wx.BoxSizer(wx.HORIZONTAL)
# Add species table widget
Setup = wx.grid.Grid(panel, -1, size=(1070, 200))
Setup.CreateGrid(9, 9)
Setup.SetColLabelValue(0, "idSetup")
Setup.SetColLabelValue(1, "idKomitent")
Setup.SetColLabelValue(2, "Drzava")
Setup.SetColLabelValue(3, "Prg")
Setup.SetColLabelValue(4, "Provajder")
Setup.SetColLabelValue(5, "ServerName")
Setup.SetColLabelValue(6, "DataBaseName")
Setup.SetColLabelValue(7, "Sifarnici")
Setup.SetColLabelValue(8, "Promena")
Setup.SetRowLabelSize(0)
for i in range(0, len(self.idSetup)):
Setup.SetCellValue(i, 0, self.idSetup[i])
for i in range(0, len(self.idKomitent)):
Setup.SetCellValue(i, 1, self.idKomitent[i])
for i in range(0, len(self.Drzava)):
Setup.SetCellValue(i, 2, self.Drzava[i])
for i in range(0, len(self.Prg)):
Setup.SetCellValue(i, 3, self.Prg[i])
for i in range(0, len(self.Provajder)):
Setup.SetCellValue(i, 4, self.Provajder[i])
for i in range(0, len(self.ServerName)):
Setup.SetCellValue(i, 5, self.ServerName[i])
for i in range(0, len(self.DataBaseName)):
Setup.SetCellValue(i, 6, self.DataBaseName[i])
for i in range(0, len(self.Sifarnici)):
Setup.SetCellValue(i, 7, self.Sifarnici[i])
for i in range(0, len(self.Promena)):
Setup.SetCellValue(i, 8, self.Promena[i])
Setup.AutoSize()
SetupTableSizer.Add(Setup, wx.ALIGN_CENTER | wx.ALL, 0)
panel.SetSizer(vbox)
self.Centre()
self.Show(True)
app = wx.App()
SetupGrid(None, -1)
app.MainLoop()
这是插入脚本
import wx
import MySQLdb
db = MySQLdb.connect("127.0.0.1", "user", "password", "database")
cursor = db.cursor()
class InsertData(wx.Frame):
def __init__(self, parent, id, title):
wx.Frame.__init__(self, parent, id, title)
panel = wx.Panel(self, -1)
panel.SetBackgroundColour('light gray')
#iconFile = "Grocery.ico"
#icon1 = wx.Icon(iconFile, wx.BITMAP_TYPE_ICO)
#self.SetIcon(icon1)
label1 = wx.StaticText(panel, -1, "idKomitent:")
label2 = wx.StaticText(panel, -1, "Drzava:")
label3 = wx.StaticText(panel, -1, "Prg:")
label4 = wx.StaticText(panel, -1, "Provajder:")
label5 = wx.StaticText(panel, -1, "ServerName:")
label6 = wx.StaticText(panel, -1, "DataBaseName:")
label7 = wx.StaticText(panel, -1, "Sifarnici:")
self.idKomitent = wx.TextCtrl(panel, -1, "")
self.Drzava = wx.TextCtrl(panel, -1, "")
self.Prg = wx.TextCtrl(panel, -1, "")
self.Provajder = wx.TextCtrl(panel, -1, "")
self.ServerName = wx.TextCtrl(panel, -1, "")
self.DataBaseName = wx.TextCtrl(panel, -1, "")
self.Sifarnici = wx.TextCtrl(panel, -1, "")
self.calc_btn = wx.Button(panel, -1, 'Insert')
self.calc_btn.Bind(wx.EVT_BUTTON, self.onEnter)
self.close = wx.Button(panel, -1, "Exit")
self.Bind(wx.EVT_BUTTON, self.OnCloseMe)
self.Bind(wx.EVT_CLOSE, self.OnCloseWindow)
# use gridbagsizer for layout of widgets
sizer = wx.GridBagSizer(vgap=6, hgap=6)
sizer.Add(label1, pos=(0, 0))
sizer.Add(self.idKomitent, pos=(0, 2)) # row 0, column 2
sizer.Add(label2, pos=(1, 0))
sizer.Add(self.Drzava, pos=(1, 2))
sizer.Add(label3, pos=(2, 0))
sizer.Add(self.Prg, pos=(2, 2))
sizer.Add(label4, pos=(3, 0))
sizer.Add(self.Provajder, pos=(3, 2))
sizer.Add(label5, pos=(4, 0))
sizer.Add(self.ServerName, pos=(4, 2))
sizer.Add(label6, pos=(5, 0))
sizer.Add(self.DataBaseName, pos=(5, 2))
sizer.Add(label7, pos=(6, 0))
sizer.Add(self.Sifarnici, pos=(6, 2))
sizer.Add(self.calc_btn, pos=(8, 1))
sizer.Add(self.close, pos=(8, 2))
# use boxsizer to add border around sizer
border = wx.BoxSizer()
border.Add(sizer, 0, wx.ALL, 20)
panel.SetSizerAndFit(border)
self.Fit()
def onEnter(self, event):
# get the values from the input widgets
idKomitent = int(self.idKomitent.GetValue())
Drzava = str(self.Drzava.GetValue())
Prg = str(self.Prg.GetValue())
Provajder = str(self.Provajder.GetValue())
ServerName = str(self.ServerName.GetValue())
DataBaseName = str(self.DataBaseName.GetValue())
Sifarnici = str(self.Sifarnici.GetValue())
db = MySQLdb.connect("127.0.0.1", "user", "password", "database")
cursor = db.cursor()
cursor.execute("INSERT INTO setup (idKomitent, Drzava, Prg, Provajder, ServerName, DataBaseName, Sifarnici) VALUES (%s, %s, %s, %s, %s, %s, %s)", (idKomitent, Drzava, Prg, Provajder, ServerName, DataBaseName, Sifarnici))
cursor.execute("commit")
self.idKomitent.Clear()
self.Drzava.Clear()
self.Prg.Clear()
self.Provajder.Clear()
self.ServerName.Clear()
self.DataBaseName.Clear()
self.Sifarnici.Clear()
cursor.close()
def OnCloseMe(self, event):
self.Close(True)
def OnCloseWindow(self, event):
self.Destroy()
app = wx.App()
frame = InsertData(None, -1, "Tabela MySQL Setup")
frame.Show()
app.MainLoop()
和最终删除脚本
import wx
import MySQLdb
db = MySQLdb.connect("127.0.0.1", "root", "aaa111bbb", "mysqlsetup")
cursor = db.cursor()
class DeleteData(wx.Frame):
def __init__(self):
wx.Frame.__init__(self)
panel = wx.Panel(self, -1)
panel.SetBackgroundColour('light gray')
#iconFile = "Grocery.ico"
#icon1 = wx.Icon(iconFile, wx.BITMAP_TYPE_ICO)
#self.SetIcon(icon1)
label1 = wx.StaticText(panel, -1, "idSetup:")
self.idSetup = wx.TextCtrl(panel, -1, "")
self.calc_btn = wx.Button(panel, -1, 'Delte')
self.calc_btn.Bind(wx.EVT_BUTTON, self.onEnter)
self.close = wx.Button(panel, -1, "Exit")
self.Bind(wx.EVT_BUTTON, self.OnCloseMe)
self.Bind(wx.EVT_CLOSE, self.OnCloseWindow)
# use gridbagsizer for layout of widgets
sizer = wx.GridBagSizer(vgap=3, hgap=3)
sizer.Add(label1, pos=(0, 0))
sizer.Add(self.idSetup, pos=(0, 2)) # row 0, column 2
sizer.Add(self.calc_btn, pos=(2, 1))
sizer.Add(self.close, pos=(2, 2))
# use boxsizer to add border around sizer
border = wx.BoxSizer()
border.Add(sizer, 0, wx.ALL, 20)
panel.SetSizerAndFit(border)
self.Fit()
def onEnter(self, event):
# get the values from the input widgets
idSetup = int(self.idSetup.GetValue())
db = MySQLdb.connect("127.0.0.1", "user", "password", "database")
cursor = db.cursor()
cursor.execute("DELETE FROM setup WHERE idSetup = '%s'" % (idSetup))
cursor.execute("commit")
self.idSetup.Clear()
cursor.close()
def OnCloseMe(self, event):
self.Close(True)
def OnCloseWindow(self, event):
self.Destroy()
app = wx.App()
frame = DeleteData(None, -1, "Tabela MySQL Setup")
frame.Show()
app.MainLoop()
我犯了错误的地方???我认为这可能很简单,只需添加:
if __name__ == "__main__":
在您的app=wx.app()节之前
i、 e
注意:对程序名使用名称、index
、main
、insert
和delete
可能是个坏主意,如果不是python本身,任何阅读代码的人都会将它们解释为关键字。Thx,它的工作原理,但现在,当我点击菜单并想调用脚本来插入和删除纸条时,我得到了一条消息“dial=DeleteData(self,-1)TypeError:uuu init_uuu()正好接受1个参数(给定3个)”。至于名字,我只想告诉你纸条是什么,我填好后再换。谢谢你。也许接受答案或投票是合适的。是的,很抱歉,我还在这里。我的声誉低于15分,所以我认为我的支持票没有显示出来。。
if __name__ == "__main__":
app = wx.App(0)
frame = GlavniProzor(None)
app.MainLoop()