python中如何调整ComboBox宽度
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python中如何调整ComboBox宽度相关的知识,希望对你有一定的参考价值。
python中ComboBox加入的字符串有可能很长,这样下拉只能显示一部分,比较郁闷。请高手指导一把,谢谢!
是使用wxpython:
cb = wx.ComboBox(self, 500, "default value", (90, 50),
(160, -1), wx.CB_DROPDOWN | wx.CB_READONLY)
使用只读的方式时,而后由于界面的要求,size 固定,此时发现当combobox中填充的一列数据中某些字符串比较长时,选择这些长字符串时就会出现无法显示完整的字符串,字符串中靠后的字符会被截断,如HeadQuarter——JIANADA(Capital),只能显示到HeadQuarter——JIA,后面的NADA(Capital)字符就被截断了,比较郁闷,感谢大家的指导!
是哪个GUI框架?
wxpython:
cb = wx.ComboBox(self, 500, "default value", (90, 50),
(160, -1), sampleList,
wx.CB_DROPDOWN
#| wx.TE_PROCESS_ENTER
#| wx.CB_SORT
)
(160, -1)就是指定size的,160是宽度。本回答被提问者和网友采纳 参考技术B 那把160改成更大的数不行吗?
是哪个GUI
框架
?
wxpython:
cb
=
wx.ComboBox(self,
500,
"default
value",
(90,
50),
(160,
-1),
sampleList,
wx.CB_DROPDOWN
#|
wx.TE_PROCESS_ENTER
#|
wx.CB_SORT
)
(160,
-1)就是指定size的,160是宽度。 参考技术C 是wxpython?pyqt?
如何根据也调整大小的终端宽度打印字符数?
【中文标题】如何根据也调整大小的终端宽度打印字符数?【英文标题】:How to print number of characters based on terminal width that also resize? 【发布时间】:2017-10-23 02:23:54 【问题描述】:不确定是否可行,但我希望做一些事情,我可以在一行上打印一个连字符来表示终端的宽度。如果窗口的宽度被调整大小,显示的连字符的数量会相应地打印出来。
【问题讨论】:
How to get Linux console window width in Python的可能重复 @khelwood 这不是重复的:这里用户还询问是否可以调整已经写好的文本的大小。 如果问题已经解决,您能否告诉使用...您选择的解决方案是什么? 【参考方案1】:这是一个更精细的版本,可以根据终端的尺寸始终打印您想要的任何内容。您还可以在没有打印任何内容时调整终端的大小,并且内容将相应地调整大小。
我对代码做了一些注释……但如果您需要,我可以更明确。
#!/usr/bin/env python2
import threading
import Queue
import time
import sys
import subprocess
from backports.shutil_get_terminal_size import get_terminal_size
printq = Queue.Queue()
interrupt = False
lines = []
def main():
ptt = threading.Thread(target=printer) # Turn the printer on
ptt.daemon = True
ptt.start()
# Stupid example of stuff to print
for i in xrange(1,100):
printq.put(' '.join([str(x) for x in range(1,i)])) # The actual way to send stuff to the printer
time.sleep(.5)
def split_line(line, cols):
if len(line) > cols:
new_line = ''
ww = line.split()
i = 0
while len(new_line) <= (cols - len(ww[i]) - 1):
new_line += ww[i] + ' '
i += 1
print len(new_line)
if new_line == '':
return (line, '')
return (new_line, ' '.join(ww[i:]))
else:
return (line, '')
def printer():
while True:
cols, rows = get_terminal_size() # Get the terminal dimensions
msg = '#' + '-' * (cols - 2) + '#\n' # Create the
try:
new_line = str(printq.get_nowait())
if new_line != '!@#EXIT#@!': # A nice way to turn the printer
# thread out gracefully
lines.append(new_line)
printq.task_done()
else:
printq.task_done()
sys.exit()
except Queue.Empty:
pass
# Build the new message to show and split too long lines
for line in lines:
res = line # The following is to split lines which are
# longer than cols.
while len(res) !=0:
toprint, res = split_line(res, cols)
msg += '\n' + toprint
# Clear the shell and print the new output
subprocess.check_call('clear') # Keep the shell clean
sys.stdout.write(msg)
sys.stdout.flush()
time.sleep(.5)
if __name__ == '__main__':
main()
【讨论】:
【参考方案2】:这正是你所要求的......有一个非常小的问题:当你缩小外壳时,光标会下降一行,上面的东西会留在那里......我可以尝试解决这个问题……但结果会更复杂。
我假设你使用的是 unix 系统。
代码使用线程能够在执行其他操作时将行保持在屏幕上。在这种情况下只是休眠......而且,实际上只使用线程可以对终端尺寸的变化有一个“快速”的答案。
#!/usr/bin/env python2
import threading
import time
import sys
from backports.shutil_get_terminal_size import get_terminal_size
def main1():
ptt = threading.Thread(target=printer2)
ptt.daemon = True
ptt.start()
time.sleep(10)
def printer2():
while True:
cols, rows = get_terminal_size()
line = '-' * (cols - 2)
sys.stdout.write("\r" + '#' + line + '#')
sys.stdout.flush()
time.sleep(.5)
【讨论】:
【参考方案3】:检查一下:(它适用于 windows 和 python3)
import os
os.system('mode con: cols=100 lines=40')
input("Press any key to continue...")
os.system('mode con: cols=1000 lines=400')
input("Press any key to continue...")
【讨论】:
以这种方式运行mode
命令只会在屏幕上显示信息,但不会捕获它。只有当它存在于当前系统上时,这种运行命令行实用程序的技术才有效。最好使用设计用于在所有/多种情况下工作的 Python 函数,而不是尝试调用特定于 Windows(或特定于 Unix)的实用程序。以上是关于python中如何调整ComboBox宽度的主要内容,如果未能解决你的问题,请参考以下文章
如何根据已更改的绑定 dataProvider 内容调整 Flex 3 ComboBox 宽度?
delphi自动调整combobox下拉列表宽度(PostMessage CB_SETDROPPEDWIDTH)
Kendo ComboBox - 如何根据其文本()而不是值()选择选项?