uk ru en pl cs sk bg de fr es it ro hu tr ar id ja

Python 1. Tix庫小部件上的動態GUI實現功能:ScrolledWindow和NoteBook(Python 1. Tix库小部件上的动态GUI实现功能:ScrolledWindow和NoteBook)

主要(主要) 關於符號(关于符号)

動態編程語言Python的優點之一是能夠在運行時動態創建圖形用戶界面(GUI)。(动态编程语言Python的优点之一是能够在运行时动态创建图形用户界面(GUI)。) 內置庫Tkinter允許您創建,放置和移動各種圖形元素,用於控制,輸入和輸出信息 - 小部件。(内置库Tkinter允许您创建,放置和移动各种图形元素,用于控制,输入和输出信息 - 小部件。) 但是,Tkinter庫具有一個功能,如果小部件數量大於允許顯示具有可用於顯示器屏幕的最大尺寸的窗口,則存在訪問窗口隱藏區域的問題。(但是,Tkinter库具有一个功能,如果小部件数量大于允许显示具有可用于显示器屏幕的最大尺寸的窗口,则存在访问窗口隐藏区域的问题。)

內置庫Tkinter的擴展,Tix(Tk接口擴展)庫可以通過ScrolledWindow窗口小部件的幫助來解決這個問題 - 一個帶滾動條的窗口。(内置库Tkinter的扩展,Tix(Tk接口扩展)库可以通过ScrolledWindow窗口小部件的帮助来解决这个问题 - 一个带滚动条的窗口。) Tix庫附帶的第二個有用的小部件是標籤窗口 - NoteBook。(Tix库附带的第二个有用的小部件是标签窗口 - NoteBook。)

然而,在Python中的窗口應用程序中使用這些窗口小部件在內部窗口小部件不適合分配的窗口大小的情況下具有顯示信息的獨特特性。(然而,在Python中的窗口应用程序中使用这些窗口小部件在内部窗口小部件不适合分配的窗口大小的情况下具有显示信息的独特特性。) 在本文中,我們將在組織動態GUI時查看這些功能:(在本文中,我们将在组织动态GUI时查看这些功能:)
第一個例子是將ScrolledWindow小部件放在主應用程序窗口中,因此所有其他小部件將被自動放置在其中。(第一个例子是将ScrolledWindow小部件放在主应用程序窗口中,因此所有其他小部件都将自动放置在其中。)
第二個例子是將ScrolledWindow小部件放在NoteBook小部件的選項卡中。(第二个例子是将ScrolledWindow小部件放在NoteBook小部件的选项卡中。)

這裡提供的示例在Python 2.7和Linux操作系統:Ubuntu 16.04LTS中實現。(这里提供的示例在Python 2.7和Linux操作系统:Ubuntu 16.04LTS中实现。) 我希望在您的Python版本和操作系統中實現這些示例不會給您帶來任何復雜性。(我希望在您的Python版本和操作系统中实现这些示例不会给您带来任何复杂性。)


示例1 - ScrolledWindow小部件作為整個應用程序的主要容器。(示例1 - ScrolledWindow小部件作为整个应用程序的主要容器。)

#!/usr/bin/python

import Tix as tx

root=tx.Tk()
root.geometry("800x600+0+10")

swr=tx.ScrolledWindow(root)
swr.pack(fill=tx.BOTH, expand=1)

nb=tx.NoteBook(swr.window)
nb.pack(fill=tx.BOTH, expand=1)

for i in range(1,21):
	nb.add("tab"+str(i),label="Tab "+str(i))

for k in range(1,39):
	l=tx.Label(nb.tab1,text="label "+str(k))
	l.pack()

for k in range(1,29):
	l=tx.Label(nb.tab2,text="label "+str(k))
	l.pack(side=tx.LEFT)

root.mainloop()

情景1的結果可以在以下三個圖中看出:(情景1的结果可以在以下三个图中看出:)


圖1(图1)

申請1號後的初步看法。(申请1号后的初步看法。) 在主窗口的右側和底部可見自動出現滾動條。(在主窗口的右侧和底部可见自动出现滚动条。) 由於NoteBook小部件佔用的總大小大於原始根窗口(800x600),因為第一個週期中指定的製表符數量以及在接下來的兩個週期中指定的標籤數量。(由于NoteBook小部件占用的总大小大于原始根窗口(800x600),因为第一个周期中指定的制表符数量以及在接下来的两个周期中指定的标签数量。) 該圖顯示了指定的20個選項卡,只有15個放在主窗口中,而在第一個選項卡中指定的39個標籤中只有31個位於。(该图显示了指定的20个选项卡,只有15个放在主窗口中,而在第一个选项卡中指定的39个标签中只有31个位于。)


圖2(图2)

初始狀態中的第二個選項卡僅顯示28個標籤中的16個標籤。(初始状态中的第二个选项卡仅显示28个标签中的16个标签。) 滾動條的位置保持不變。(滚动条的位置保持不变。)


圖3(图3)

向下移動底部滾動條,您可以看到主窗口不僅覆蓋了NoteBook小部件的所有選項卡,而且還覆蓋了放置在第二個選項卡中的所有標籤。(向下移动底部滚动条,您可以看到主窗口不仅覆盖了NoteBook小部件的所有选项卡,而且还覆盖了放置在第二个选项卡中的所有标签。)


示例2 - ScrolledWindow小部件位於NoteBook小部件的每個選項卡內。(示例2 - ScrolledWindow小部件位于NoteBook小部件的每个选项卡内。)

#!/usr/bin/python

import Tix as tx

root=tx.Tk()
root.geometry("800x600+0+10")

swm = []

nb=tx.NoteBook(root)
nb.pack(fill=tx.BOTH, expand=1)

for i in range(1,21):
	nb.add("tab"+str(i),label="Tab "+str(i))
	sw=tx.ScrolledWindow(eval("nb.tab"+str(i)))
	swm.append(sw)
	sw.pack(fill=tx.BOTH, expand=1)

for k in range(1,39):
	l=tx.Label(swm[0].window,text="label "+str(k))
	l.pack()

for k in range(1,29):
	l=tx.Label(swm[1].window,text="label "+str(k))
	l.pack(side=tx.LEFT)

root.mainloop()

情景2的結果可以在以下三個圖中看到:(情景2的结果可以在以下三个图中看到:)


圖4(图4)

啟動後第2號應用程序的初始視圖。(启动后第2号应用程序的初始视图。) 滾動條只出現在Tab1選項卡的右側,因為垂直標記的數量大於主窗口的原始大小。(滚动条只出现在Tab1选项卡的右侧,因为垂直标记的数量大于主窗口的原始大小。)


圖5(图5)

第二個選項卡僅顯示底部滾動條,因為在此選項卡中,標籤是水平定位的。(第二个选项卡仅显示底部滚动条,因为在此选项卡中,标签是水平定位的。)


圖6(图6)

將滾動條向右移動,您可以看到窗口末尾的所有標籤,但是您無法訪問數字大於15的標籤。(将滚动条向右移动,您可以看到窗口末尾的所有标签,但是您无法访问数字大于15的标签。) 因此,在變體2中,滾動條僅在選項卡內提供訪問。(因此,在变体2中,滚动条仅在选项卡内提供访问。) 如果選項卡的數量大於主窗口的水平尺寸的數量,則將無法訪問它們。(如果选项卡的数量大于主窗口的水平尺寸的数量,则将无法访问它们。)

因此,如果NoteBook小部件的選項卡數量不是太大,不能超過主窗口的顯示限制,那麼所考慮的ScrolledWindow小部件的位置變體是完全可以接受的。(因此,如果NoteBook小部件的选项卡数量不是太大,不能超过主窗口的显示限制,那么所考虑的ScrolledWindow小部件的位置变体是完全可以接受的。)

嘗試統一兩個變體已經產生與示例1相同的結果,因為ScrolledWindow的窗口小部件窗口擴展到放置在其中的對象佔用的最大大小。(尝试统一两个变体已经产生与示例1相同的结果,因为ScrolledWindow的窗口小部件窗口扩展到放置在其中的对象占用的最大大小。)

我希望這些例子可以幫助您在Python中設計窗口應用程序。(我希望这些例子可以帮助您在Python中设计窗口应用程序。)

Oleksii Tolkachov (ORCID ID: 0000-0002-4835-0507), Kiev, 30.08.2017.

主要(主要) 關於符號(关于符号)