0

我正在使用 PYGTK 编写一个非常简单的下载管理器,同时使用 wGet 和 Python。一切都很好,但它占用了大量的屏幕空间......我的代码:

#!/usr/bin/python
import gtk
import os
def submitdownload(self):
    os.system("wget "+site.get_text() + " -P  "+ directory.get_text())
main=gtk.Window()
main.set_title("Simple Downloader with wGet")
structure=gtk.Table(2, 6, True)
label=gtk.Label("Simple downloader with wGet")
sitedes=gtk.Label("Your download link:")
site=gtk.Entry()
submit=gtk.Button("Submit download")
submit.connect("clicked", submitdownload)
directorydes=gtk.Label("Save to: ")
directory=gtk.Entry()
description=gtk.Label("Please don't close the black box (terminal window) or the application will close automatically. It is needed for the download.")
main.add(structure)
structure.attach(label, 0, 2, 0, 1)
structure.attach(sitedes, 0, 1, 1, 2)
structure.attach(site, 1, 2, 1, 2)
structure.attach(submit, 0, 2, 4, 5)
structure.attach(directorydes, 0, 1, 2, 3)
structure.attach(directory, 1, 2, 2, 3)
structure.attach(description, 0, 2, 5, 6)
main.connect("destroy", lambda w: gtk.main_quit())
main.show_all()
gtk.main()

它在右侧抛出了很多未使用的空间。如何解决?通过“X”按钮关闭应用程序非常困难。

4

1 回答 1

1

您似乎正在创建一个具有 2 行和 6 列的表,而不是我假设您所追求的 6 行和 2 列 - 查看参考文档,您会看到行在构造函数中排在首位。

因为您设置homogenousTrue,所以表格将所有列设置为相同的宽度和高度(就是这样homogenous做的),并且因为您要求 6 列,所以它添加了许多相同宽度的空白列,这使得您的窗口非常宽。

将行更改为:

structure = gtk.Table(6, 2, True)

......这似乎更合理。那是你所追求的吗?

我个人建议创建一个HBox来表示该列。当您需要全宽小部件时,您可以直接将它们放入此容器中。如果您需要具有多个小部件的行,您可以创建一个VBox来表示该行,将小部件添加到该行,然后将其VBox本身添加到HBox. 这种方法一开始可能看起来有点繁琐,但它允许 GTK 处理更多的布局本身,这通常会使您的应用程序更好地处理调整大小(只要您正确提示每个小部件是否应该可扩展)。此外,如果您稍后添加更多小部件,则无需返回并更改行数和列数 -VBox并且HBox在这方面更加灵活。所以总的来说,我总是发现这些要容易得多,除非我真正追求的是一个固定的小部件网格(例如,如果我正在实现扫雷)。

于 2013-07-01T12:18:05.843 回答