我在a里面有一个treeview-widget ScrolledWindow,它在运行时填充.我希望ScrolledWindow自动滚动到列表的末尾.我"解决"问题,通过调整vadjustment的ScrolledWindow,每次一个行插入到树视图.例如:
if new_line_in_row:
adj = self.scrolled_window.get_vadjustment()
adj.set_value( adj.upper - adj.page_size )
Run Code Online (Sandbox Code Playgroud)
如果我在交互式ipython会话中运行代码并自己设置值,一切都按预期工作.
如果我使用默认的python解释器运行代码,则自动滚动不会一直有效.我调试了代码,问题似乎是,调整值有某种"滞后",只在一段时间后才会改变.
我的问题是:如何可靠地滚动到最大位置ScrolledWindow?是一个特殊的信号生成,我可以使用?还是有更好的方法来设置adjustment-value?
我有一个问题与Gtk.Treeviewindide a Gtk.ScrolledWindow.我有大量的数据,不适合我的普通窗口几何,所以我把我的Treeview放在一个ScrolledWindow,这似乎是正常的方式.这个解决方案的问题是,当我滚动时,我的列标题消失了.这种行为对我来说似乎有点好,因为它ScrolledWindow应该关心它里面的小部件.
那么,如何让我的树视图是滚动和第一行中总是显示栏标题?
我修改了basictreeview.py示例来表示我的问题:
#!/usr/bin/env python
# example basictreeview.py
import pygtk
pygtk.require('2.0')
import gtk
class BasicTreeViewExample:
# close the window and quit
def delete_event(self, widget, event, data=None):
gtk.main_quit()
return False
def __init__(self):
# Create a new window
self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
self.window.set_title("Basic TreeView Example")
self.window.set_size_request(200, 200)
self.window.connect("delete_event", self.delete_event)
# create a TreeStore with one string column to use as the model
self.liststore = gtk.ListStore(str)
# we'll add some data …Run Code Online (Sandbox Code Playgroud) 我写了一个wxPython程序,我正在翻译成wxWidgets.该程序有一个滚动窗口,显示图像.在Rappin,wxPython In Action(清单12.1)之后,我在一个面板中使用了StaticBitmap.在浏览最新的wxWidgets文档时,我发现了一个可怕的警告:wxStaticBitmap应该只用于非常小的图像.它说,"......如果你想要便携地显示更大的图像,你应该使用自己的控制." 好的.给我看看.我没有"自己的控制权".
拉平错了,或文件是否过时了?
问题 - 一个新手,毫无疑问 - 是什么是在wxWidgets中做一个简单的图像视图窗口的正确方法?wxStaticBitmap的直接替代品会很好.我查看了wxWidgets"samples"目录中的"image"程序.这是一场战争与和平. 当然必须有罐头类或简单的食谱.
我正在使用GTK +编写应用程序,我遇到了问题.我正在使用GTK滚动窗口,我必须将垂直滚动条滚动到底部,但我不知道,如何.我在寻找谷歌,但我一无所获.
我正在使用winxp和wxpython(wxpython 3.1,python 2.6)来创建一个GUI程序,它将文本从TextCtrl复制到包含StaticText的ScrollablePanel.这一切都很好,但是,滚动部分不能正常工作.它似乎不会实时更新.当我最大化窗口并再次最大化时,滚动条会更新.但是,如果我再次开始键入TextCtrl(从而使用事件将文本添加到ScrollablePanel内的StaticText),面板上的滚动条不会更新,除非我再次最小化,依此类推.
所以问题是,如何实时更新ScrolledPanel?我有一个事件设置等待文本在TextCtrl中更改,这是我认为更新需要去的地方.我已经尝试过更新,刷新和布局,但它们似乎没有做太多.更大的问题是,最小化窗口并使其再次最大化,更新,刷新和布局不会这样做?谢谢你的帮助.对不起,我无法发布代码,保密.我很感激你能给我的任何帮助.我通常可以通过搜索自己发现问题,但我还没有找到任何关于此类事情的文档.这是我的第一次,但我从你的答案中得到了很多帮助.再次感谢!:)
添加:
import wx
import wx.lib.inspection
from wx.lib.scrolledpanel import ScrolledPanel
class MyFrame( wx.Frame ):
# TODO: add all class variables here for convention
tin = None
hsizer = None
def __init__( self, parent, ID, title ):
wx.Frame.__init__( self, parent, ID, title,
wx.DefaultPosition, wx.Size( 200, 150 ) )
self.InitWidgets()
self.InitBindings()
self.InitFinish()
def InitWidgets( self ):
self.hsizer = wx.BoxSizer( wx.HORIZONTAL )
# Add the TextCtrl
vsizer = wx.BoxSizer( wx.VERTICAL )
self.tin = wx.TextCtrl( self, style=wx.TE_MULTILINE )
vsizer.Add( self.tin, 1, …Run Code Online (Sandbox Code Playgroud) 我正在尝试构建一个可以使用鼠标绘制的ScrolledWindow,它也可以正常工作,但是当用户在窗口上绘图而滚动条不在"主页"位置时,我会得到一个令人讨厌的闪烁..
要重现,请运行附加程序,向下滚动(或向右)并按住鼠标左键"涂抹"一下.你应该偶尔看到一个闪烁的..
import wx
class MainFrame(wx.Frame):
""" Just a frame with a DrawPane """
def __init__(self, *args, **kw):
wx.Frame.__init__(self, *args, **kw)
s = wx.BoxSizer(wx.VERTICAL)
s.Add(DrawPane(self), 1, wx.EXPAND)
self.SetSizer(s)
########################################################################
class DrawPane(wx.PyScrolledWindow):
""" A PyScrolledWindow with a 1000x1000 drawable area """
VSIZE = (1000, 1000)
def __init__(self, *args, **kw):
wx.PyScrolledWindow.__init__(self, *args, **kw)
self.SetScrollbars(10, 10, 100, 100)
self.prepare_buffer()
self.Bind(wx.EVT_PAINT, self.on_paint)
self.Bind(wx.EVT_LEFT_DOWN, self.on_mouse_down)
self.Bind(wx.EVT_MOTION, self.on_motion)
def prepare_buffer(self):
self.buffer = wx.EmptyBitmap(*DrawPane.VSIZE)
dc = wx.BufferedDC(None, self.buffer)
dc.Clear()
dc.DrawLine(0, 0, 999, 999) # Draw something to …Run Code Online (Sandbox Code Playgroud) 我正在使用Python和pyGTK开发一个项目.我有一个窗口,其唯一目的是显示图像.除非图像太大而不适合屏幕,否则默认情况下窗口不应显示滚动条.
所以我做的是这样的:
window = gtk.Window()
window.resize(image.size[0], image.size[1])
scrolled = gtk.ScrolledWindow()
scrolled.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
scrolled.set_shadow_type(gtk.SHADOW_NONE)
area = gtk.DrawingArea()
area.set_size_request(image.size[0], image.size[1])
window.add(scrolled)
scrolled.add_with_viewport(area)
area.show()
scrolled.show()
window.show()
Run Code Online (Sandbox Code Playgroud)
但它不太有效.生成的窗口有点太小,因此滚动条显示出来.
为了工作,我必须将第二行改为:
window.resize(image.size[0] + 2, image.size[1] + 2)
Run Code Online (Sandbox Code Playgroud)
但这很丑陋,并不适用于所有系统.在我的Windows框中,我必须使用+ 3.
我该怎么做才能确保窗口足够大以容纳图像?