【问题标题】:add different widgets to each wxnotebook tab permanently in a txt file or sqlite将不同的小部件永久添加到 txt 文件或 sqlite 中的每个 wxnotebook 选项卡
【发布时间】:2020-05-17 00:27:32
【问题描述】:

请问如何在选项卡中永久添加不同的小部件并永久保存它们

<html>
<pre>
import wx
tabs = []
with open('test.txt','r') as file:
    for element in file.readlines():
        tabs.append(element)

class TabPanel(wx.Panel):
    def __init__(self, parent, pageNum):
        self.parent = parent
        self.pageNum = pageNum
        wx.Panel.__init__(self, parent=parent)

class DemoFrame(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, wx.ID_ANY, "Notebook", size=(600,400))
        panel = wx.Panel(self)
        self.tab_num = len(tabs)

        self.notebook = wx.Notebook(panel)
        for tab in tabs:
            name = "Page " + str(tab)
            tab = TabPanel(self.notebook, 1)
            self.notebook.AddPage(tab, name)

        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(self.notebook, 1, wx.ALL|wx.EXPAND, 5)

        btn = wx.Button(panel, label="Add Page")
        btn.Bind(wx.EVT_BUTTON, self.addPage)
        sizer.Add(btn)

        panel.SetSizer(sizer)
        self.Layout()
        self.Show()

    def addPage(self, event):
        self.tab_num += 1
        new_tab = TabPanel(self.notebook, self.tab_num)
        self.notebook.AddPage(new_tab, "Page %s" % self.tab_num)
        tabs.append(self.tab_num)
        print()

        with open('test.txt','a+') as file:
            file.write(str(self.tab_num))
            file.write('\n') 

if __name__ == "__main__":
    app = wx.App(False)
    frame = DemoFrame()
    app.MainLoop()
</pre>

</html>

【问题讨论】:

  • add permanently 是什么意思?您只需要创建控件并将它们添加到 sizer。查看 wxPython 下载链接上的不同示例。
  • 单击添加页面时的注意事项。生成一个页面并将其存储在一个 txt 文件中,如果程序重新打开或重新加载,新选项卡仍然存在。如何将小部件添加到该标签页?当我关闭程序并再次打开时,所有信息仍然存在“小部件”
  • 所以你想要的是第一次运行程序,点击按钮,然后在退出时保存布局。然后当程序再次启动时,此布局将恢复。我理解正确吗?
  • 如果我的描述是真实的 - 在你的 wxFrame 派生类中创建一个函数来添加之前正在完成的笔记本页面或控件。然后当你启动程序时——调用这个函数。并且只需保存需要创建的控件/页面的数量。另一个思路是看open source RAD tool,比如wxGlade或者wxFB或者其他的。
  • 你明白了。我真的不知道该怎么做我找到了这段代码并做了一些修改,但我真的不知道如何继续如果你能写一个小例子,我将不胜感激。提前谢谢你。

标签: sqlite user-interface wxpython wxwidgets


【解决方案1】:

这样的东西应该可以让你开始(抱歉不熟悉python):

class DemoFrame(wx.Frame):
    def __init__(self):
        self.tab_num = 1
        wx.Frame.__init__(self, None, wx.ID_ANY, "Notebook", size=(600,400))
        panel = wx.Panel(self)
        with open( "test.txt", "r" as file:
            self.tab_num = file.read()

        self.notebook = wx.Notebook(panel)
        for tab in [1..self.tab_num]:
            name = "Page " + str(tab)
            tab = TabPanel(self.notebook, 1)
            self.notebook.AddPage(tab, name)

        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(self.notebook, 1, wx.ALL|wx.EXPAND, 5)

        btn = wx.Button(panel, label="Add Page")
        btn.Bind(wx.EVT_BUTTON, self.addPage)
        sizer.Add(btn)

        panel.SetSizer(sizer)
        self.Layout()
        self.Show()

    def addPage(self, event):
        self.tab_num += 1
        new_tab = TabPanel(self.notebook, self.tab_num)
        self.notebook.AddPage(new_tab, "Page %s" % self.tab_num)
        tabs.append(self.tab_num)
        print()

        with open('test.txt','a+') as file:
            file.write(str(self.tab_num))
            file.write('\n') 

if __name__ == "__main__":
    app = wx.App(False)
    frame = DemoFrame()
    app.MainLoop()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-01
    • 1970-01-01
    相关资源
    最近更新 更多