python pygubu tkinter文本滚动条
我对python并不陌生,但从未创建过GUI 需要为一些用户创建一个非常简单的GUI。 使用此构造函数创建基于xml的GUI标记 问题: 文本框的滚动条出现了,但从来没有起作用。尝试了很多教程,阅读了文档,在我看来,我做得不错(设置文本字段的python pygubu tkinter文本滚动条,python,user-interface,tkinter,Python,User Interface,Tkinter,我对python并不陌生,但从未创建过GUI 需要为一些用户创建一个非常简单的GUI。 使用此构造函数创建基于xml的GUI标记 问题: 文本框的滚动条出现了,但从来没有起作用。尝试了很多教程,阅读了文档,在我看来,我做得不错(设置文本字段的yscrollcommand属性和滚动条的command) mainWindow.ui文件: <?xml version='1.0' encoding='utf-8'?> <interface> <object class=
yscrollcommand
属性和滚动条的command
)
mainWindow.ui文件:
<?xml version='1.0' encoding='utf-8'?>
<interface>
<object class="ttk.Frame" id="mainWindow">
<property name="height">200</property>
<property name="width">200</property>
<layout>
<property name="column">0</property>
<property name="propagate">True</property>
<property name="row">0</property>
</layout>
<child>
<object class="ttk.Label" id="lblKey">
<property name="padding">0</property>
<property name="text" translatable="yes">Keyword:</property>
<property name="underline">0</property>
<layout>
<property name="column">0</property>
<property name="padx">5</property>
<property name="pady">8</property>
<property name="propagate">True</property>
<property name="row">0</property>
<property name="sticky">nw</property>
</layout>
</object>
</child>
<child>
<object class="ttk.Entry" id="input_keyword">
<property name="text" translatable="yes">Input Keyword</property>
<property name="width">50</property>
<layout>
<property name="column">1</property>
<property name="pady">7</property>
<property name="propagate">True</property>
<property name="row">0</property>
<property name="sticky">n</property>
</layout>
</object>
</child>
<child>
<object class="ttk.Button" id="btnStart">
<property name="text" translatable="yes">Search</property>
<layout>
<property name="column">2</property>
<property name="padx">5</property>
<property name="pady">5</property>
<property name="propagate">True</property>
<property name="row">0</property>
<property name="sticky">ne</property>
</layout>
</object>
</child>
<child>
<object class="tk.Text" id="logBox">
<property name="height">10</property>
<property name="text" translatable="yes">Logs:</property>
<property name="width">50</property>
<property name="yscrollcommand">yscrollbar.set</property>
<layout>
<property name="column">0</property>
<property name="columnspan">3</property>
<property name="padx">5</property>
<property name="pady">5</property>
<property name="propagate">True</property>
<property name="row">1</property>
<property name="rowspan">1</property>
<property name="sticky">ew</property>
</layout>
</object>
</child>
<child>
<object class="ttk.Scrollbar" id="yscrollbar">
<property name="command">logBox.yview</property>
<property name="orient">vertical</property>
<layout>
<property name="column">2</property>
<property name="padx">5</property>
<property name="pady">5</property>
<property name="propagate">True</property>
<property name="row">1</property>
<property name="sticky">nse</property>
</layout>
</object>
</child>
</object>
</interface>
class Application:
def __init__(self, master):
self.builder = builder = pygubu.Builder()
builder.add_from_file('mainWindow.ui')
self.mainwindow = builder.get_object('mainWindow', master)
if __name__ == "__main__":
root = tk.Tk()
app = Application(root)
root.mainloop()
我手动设置它,它可以工作 scrollbar的问题是,您必须首先创建scrollbar和小部件,然后才能将它们分配给另一个
import tkinter as tk
import pygubu
class Application:
def __init__(self, master):
self.builder = builder = pygubu.Builder()
builder.add_from_file('mainwindow.ui')
self.mainwindow = builder.get_object('mainWindow', master)
# get objects
self.logBox = builder.get_object('logBox', master)
self.yscrollbar = builder.get_object('yscrollbar', master)
# assign scrollbar to text widget
#<property name="yscrollcommand">yscrollbar.set</property>
#<property name="command">logBox.yview</property>
self.logBox['yscrollcommand'] = self.yscrollbar.set
self.yscrollbar['command'] = self.logBox.yview
# set some text for test
for x in range(20):
self.logBox.insert('end', '\nHello World!')
if __name__ == "__main__":
root = tk.Tk()
app = Application(root)
root.mainloop()
当您创建小部件并且滚动条还不存在时,您不能将滚动条分配给小部件。当您创建scrollbar并且小部件还不存在时,您不能将小部件分配给scrollbar。因此,您必须首先创建一个对象,而不指定给第二个对象。接下来,可以创建第二个对象,并将其指定给第一个对象。然后,您可以将第一个对象指定给第二个对象。首先创建两个对象,然后再将一个对象分配给另一个对象,这样更具可读性
import tkinter as tk
import pygubu
class Application:
def __init__(self, master):
self.builder = builder = pygubu.Builder()
builder.add_from_file('mainwindow.ui')
self.mainwindow = builder.get_object('mainWindow', master)
# get objects
self.logBox = builder.get_object('logBox', master)
self.yscrollbar = builder.get_object('yscrollbar', master)
# assign scrollbar to text widget
#<property name="yscrollcommand">yscrollbar.set</property>
#<property name="command">logBox.yview</property>
self.logBox['yscrollcommand'] = self.yscrollbar.set
self.yscrollbar['command'] = self.logBox.yview
# set some text for test
for x in range(20):
self.logBox.insert('end', '\nHello World!')
if __name__ == "__main__":
root = tk.Tk()
app = Application(root)
root.mainloop()
将tkinter作为tk导入
进口皮古布
班级申请:
定义初始(自我,主):
self.builder=builder=pygubu.builder()
builder.add\u from\u文件('mainwindow.ui'))
self.mainwindow=builder.get\u对象('mainwindow',master)
#获取对象
self.logBox=builder.get\u对象('logBox',master)
self.yscrollbar=builder.get_对象('yscrollbar',master)
#将滚动条分配给文本小部件
#yscrollbar.set
#logBox.yview
self.logBox['yscrollcommand']=self.yscrollbar.set
self.yscrollbar['command']=self.logBox.yview
#为测试设置一些文本
对于范围(20)内的x:
self.logBox.insert('end','nHello World!')
如果名称=“\uuuuu main\uuuuuuuu”:
root=tk.tk()
app=应用程序(根)
root.mainloop()
如果.ui文件中接口的主要对象类是tk.Toplevel
可以这样声明类应用程序的init方法:
def __init__(self, master=None):
然后:
if __name__== '__main__':
app = Application()
在代码中手动创建GUI-您将拥有更好的控制。