我使用Python来解析日志文件中的条目,并使用Tkinter显示条目内容,到目前为止它非常好.输出是标签小部件的网格,但有时会有比屏幕上显示的行多的行.我想添加一个滚动条,看起来应该很容易,但我无法弄明白.
该文档暗示只有List,Textbox,Canvas和Entry小部件支持滚动条界面.这些似乎都不适合显示小部件网格.可以在Canvas小部件中放置任意小部件,但您似乎必须使用绝对坐标,因此我无法使用网格布局管理器?
我已经尝试将小部件网格放入框架,但这似乎不支持滚动条界面,所以这不起作用:
mainframe = Frame(root, yscrollcommand=scrollbar.set)
Run Code Online (Sandbox Code Playgroud)
任何人都可以建议绕过这个限制吗?我不想在PyQt中重写并增加我的可执行图像大小,只需要添加一个滚动条!
我正在研究地图应用程序,需要使用表格,表格和地图中的图形对象来显示数据对象.我正在使用PyQt,但这并不重要,因为这是一个Qt问题而不是Python问题.
如果我只需要表格和表单视图,这将很容易,我只使用Qt模型/视图框架.但是,我需要地图视图来提供仅使用Graphics View框架才真正可用的功能,这实际上是它自己的模型/视图框架,QGraphicsScene充当数据模型.
我可以想到两种方法来做到这一点.一种是从QAbstractItemModel子类化的权威模型开始,将其链接到QAbstractItemView的子类,并从那里生成并更新场景中的QGraphicsItems.这看起来很丑陋,因为我不知道如何通过与QGraphicsItem的交互来处理用户与数据项的交互和更改.
我能想到的另一种方法是将QGraphicsScene视为权威数据源,将数据对象存储在每个QGraphicsItem的.data()属性中.然后,我将QAbstractItemModel子类化并编写它,以便它在数据存储中访问场景中的数据,然后其他视图将其用作模型.我如何将更改传播到场景中的数据直到模型?
无论采取哪种方法,看起来框架都没有处理差距.在模型/视图中,假设所有更改都在模型中进行.在图形视图中,假定所有更改都在场景中进行.
那么你选择哪种方法QAbstractItemModel(权威) - > QAbstractItemView-> QGraphicsScene或者QGraphicsScene(权威) - > QAbstractItemModel->其他视图.你为什么选择一个而不是另一个?你有什么期望?有没有其他人需要弥合Qt的双模型/视图框架之间的差距,你是如何做到的?
如果我使用CSV模块存储布尔值,它将被str()函数转换为字符串'True'或'False'.但是当我加载这些值时,一个'False'字符串的计算结果为True,因为它是一个非空字符串.
我可以通过'manualy'来解决它在读取时使用IF语句检查字符串以查看字符串是什么,但它有点不那么优雅.任何更好的想法,或者这只是编程世界中的其中一个?
我有一个简单的烧瓶应用程序,需要显示一个值表,单元格背景根据阈值的单元格值进行颜色编码.我正在生成表格内容如下:
{% block dashboard_table2 %}
<table>
{% for row in data %}
{% for item in row %}
<td>{{ item }}</td>
{% endfor %}
</tr>
{% endfor %}
</table>
{% endblock %}
Run Code Online (Sandbox Code Playgroud)
我尝试在Python中将样式标记中的值包装起来,但它不起作用:
if int(value) <= 10:
value = '<p style="background-color:Red">' + value + '</p>'
Run Code Online (Sandbox Code Playgroud)
我猜测页面的CSS覆盖了style属性.我也试过设置文本颜色属性而不是背景颜色但没有骰子.有什么建议可以做到这一点吗?我想要一个简洁的方法来指定模板中没有硬编码的阈值.
这些工作:
>>> print [1,2,3] + [4,5]
[1,2,3,4,5]
>>> 'abc'.upper()
'ABC'
Run Code Online (Sandbox Code Playgroud)
这不是:
>>> print [1,2,3].extend([4,5])
None
Run Code Online (Sandbox Code Playgroud)
为什么?你可以在裸字符串上使用字符串方法,那么为什么不能在像列表这样的裸序列类型上使用方法呢?即便这样也行不通:
>>> print list([1,2,3]).extend([4,5])
None
Run Code Online (Sandbox Code Playgroud)
NB对于"工作"的口语含义.当然,我的预期行为不正确的理由很充分.我只是好奇它是什么.
PS我接受了下面的灵魂检查答案,他是对的,但在调查加法运算符是如何实现的时候,我发现以下有效:
>>> [1,2,3].__add__([4,5])
[1, 2, 3, 4, 5]
Run Code Online (Sandbox Code Playgroud)
但是可能add方法不会修改底层对象并创建一个新的返回对象,就像字符串方法一样.