Dav*_*lla 5 python gtk application-development pygi
我有一个 Python 应用程序,它使用一个Gtk.Notebook小部件来显示不同的页面。这些页面中的每一个都包含一组不同的小部件,我注意到垂直空间方面“最高”的小部件定义了笔记本的整体垂直大小。
但我实际上希望我的应用程序调整页面大小以不浪费垂直空间,并进行调整,即调整到与它们包含的小部件相同的垂直大小。当我选择每个页面时,应该发生这种调整大小。

这是生成此笔记本的示例代码(为简单起见,该示例每页包含一个小部件)
简而言之,如何在选择笔记本页面时动态调整它们的大小,以便它们的垂直空间适应与它们的子部件相同?
我不知道一个好的答案,但我有一个解决方法给你:
基本思想是,您需要一个容器小部件作为每个页面中的父小部件(不要直接在页面中放置标签),并且您可以隐藏/显示除容器之外的所有内容(如果您也隐藏容器,则页面将会消失)。
该解决方案应该适用于其他任意的小部件层次结构。
from gi.repository import Gtk
class NotebookWindow():
def __init__(self):
self.builder = Gtk.Builder()
self.builder.add_from_file('notebook.ui')
self.builder.get_object('window1').connect('delete-event',
Gtk.main_quit)
notebook = self.builder.get_object('notebook1')
notebook.connect("switch-page", self.on_notebook1_switch_page)
self.on_notebook1_switch_page(notebook, None,
notebook.get_current_page())
def on_notebook1_switch_page(self, widget, label, page):
for p in range(widget.get_n_pages()):
container = widget.get_nth_page(p)
if not p == page:
for c in container.get_children():
try:
c.hide_all()
except AttributeError:
c.hide()
else:
for c in container.get_children():
try:
c.show_all()
except AttributeError:
c.show()
if __name__ == '__main__':
notebookwindow = NotebookWindow()
Gtk.main()
Run Code Online (Sandbox Code Playgroud)
在我原来的答案中,我记录并重新设置了请求的尺寸。这通常不起作用,因为所请求的大小只是最小大小。不过,为了使其正常工作,我必须记录最大尺寸。
如果不需要实际的笔记本小部件,而只是将相似内容放在一起并提供在它们之间切换的方法的一种方法,那么可能会有更好/更简单的解决方案。这是最终用于Qreator的一个:
主要思想是使用像Gtk.Boxpage_box这样的容器(在下面的示例中调用)并仅保留一项可见。您还需要一个包含每个页面内容的列表,每个页面都打包到一个小部件中(例如Gtk.Grid)。
for page in page_list:
self.ui.page_box.add(page.grid)
Run Code Online (Sandbox Code Playgroud)
这page_list是一个简单的页面对象列表,其中页面对象有一个grid属性(包含所有页面内容的 Gtk.Grid)。
最后,您需要提供一种在内容之间切换的方法,例如使用一组按钮,每个按钮page_id在单击时调用相应的切换方法:
def switch_view(self, page_id):
# hide all pages
for child in self.ui.page_box.get_children():
child.hide()
# show the single page that is active
self.ui.page_box.get_children()[page_id].show()
Run Code Online (Sandbox Code Playgroud)
这不是问题的字面答案,但它可能会解决同样的问题。
| 归档时间: |
|
| 查看次数: |
2579 次 |
| 最近记录: |