python pygubu tkinter文本滚动条

时间:2017-01-31 10:13:20

标签: python user-interface tkinter

我对python不是很新,但从未创建过GUI。

需要为某些scraper创建一个非常简单的GUI。 使用此构造函数https://github.com/alejandroautalan/pygubu来创建基于xml的GUI标记。

问题: 文本框的滚动条显示但从不起作用。尝试了很多教程,阅读文档,在我看来,我做得很好(为文本字段设置yscrollcommand属性,{{ 1}}用于滚动条。)

mainWindow.ui文件:

command

相关的python代码:

<?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>

2 个答案:

答案 0 :(得分:0)

我手动设置它可以正常工作。

滚动条就是这个问题,你必须首先创建滚动条和小部件,之后你可以将它们分配给另一个。

创建窗口小部件时,您无法将滚动条指定给窗口小部件,而滚动条尚不存在。当您创建滚动条并且小部件尚不存在时,您无法将小部件分配给滚动条。因此,您必须首先创建一个对象而不分配给第二个对象。接下来,您可以创建第二个对象并分配给第一个对象。之后,您可以将第一个对象分配给第二个对象。首先创建两个对象并在之后将它们分配给另一个对象可以更具可读性。

'insert overwrite hiveTable select col1, h2.col2, col3 from hbaseTable h1,hbaseTable2 h2 where h1.col=h2.col2';

答案 1 :(得分:0)

如果.ui文件中接口的主对象类是tk.Toplevel 可以像这样声明类Application的 init 方法:

def __init__(self, master=None):

然后:

if __name__== '__main__':
    app = Application()