<h2>一。第一个问题:滚动条</h2>
<p>解决方案包括为每个列创建一个顶级ttk.Treeview对象和另一个树。滚动条激活链接到顶级树视图。这比将三列放在同一个树对象中要麻烦一些,但它可以工作:</p>
<pre><code># Top level Treeview object
bot = ttk.Treeview( Tkinter.Tk() )
# Columns (treeview objects also)
columns = create_columns( bot)
################################
## Scrollbars
vsb = ttk.Scrollbar( bot,
orient="vertical",
command = bot.yview
)
hsb = ttk.Scrollbar( bot,
orient="horizontal",
command = bot.xview
)
## Link scrollbars activation to top-level object
bot.configure( yscrollcommand=vsb.set,
xscrollcommand=hsb.set)
## Link scrollbar also to every columns
map ( lambda col : col.configure( yscrollcommand=vsb.set,xscrollcommand=hsb.set), columns )
</code></pre>
<h2>第二个问题:边界/山脊</h2>
<p>使用样式配置对象</p>
<pre><code>ttk.Style().configure( '.', # every class of object
relief = 'flat', # flat ridge for separator
borderwidth = 0, # zero width for the border
)
</code></pre>
<p>但是它在Windows上不起作用:它是一个bug(或一个特性:p)。</p>
<p>Windows完全忽略<code>-borderwidth</code>参数。(有关<code>comp.lang.tcl</code>邮件列表的更多信息:<a href="http://coding.derkeiler.com/Archive/Tcl/comp.lang.tcl/2007-11/msg00923.html" rel="noreferrer">http://coding.derkeiler.com/Archive/Tcl/comp.lang.tcl/2007-11/msg00923.html</a>)</p>
<h2>第三个问题:截断</h2>
<p>这是最简单的问题:参数<code>-values</code>期望<code>iterable</code>应用于每个列。例如:</p>
<pre><code>for (col, value) in zip( tree.columns(), values ) :
col.insert(value)
</code></pre>
<p>这就是错误所在:a<code>string</code>也是一个<code>iterable</code>!(它实际上是一个字符列表)因此,当您试图用消息<code>"This is a message"</code>调用<code>insert</code>时,ttk将对第一列应用<code>"This"</code>,对第二列应用<code>"is"</code>,依此类推。。。
要强制将消息作为一个整体应用,只需在末尾添加coma:<code>(idmensajeactual,)</code></p>
<p>此代码有效:</p>
<pre><code>chat2.insert("", "end", iid=(idmensajeactual,) , values=mensaje, tags=(messageid))
</code></pre>
<h2>最后</h2>
<p>我上传了我的存根作为github的主旨。你可以在这里查看并根据需要调整:<a href="https://gist.github.com/lucasg/7643411" rel="noreferrer">https://gist.github.com/lucasg/7643411</a></p>
<p>输出:</p>
<p><img src="https://i.stack.imgur.com/h01sG.png" alt="enter image description here"/></p>