" TypeError:并非在字符串格式化期间转换所有参数"进入窗口时

时间:2015-11-26 07:09:49

标签: python tkinter

我正在按照问题回答here Bryan Oakley,但是尽管提问者说它有效,但却给了我这个错误。

   root.geometry("+%d+%d" % (rootsize + (x, y)))
TypeError: not all arguments converted during string formatting

我做错了什么?

以下是我正在使用的代码:

w = root.winfo_screenwidth()
h = root.winfo_screenheight()
rootsize = tuple(int(_) for _ in root.geometry().split('+')[0].split('x'))
x = w/2 - rootsize[0]/2
y = h/2 - rootsize[1]/2
root.geometry("+%d+%d" % (rootsize + (x, y)))

2 个答案:

答案 0 :(得分:1)

您要向tuple添加元素,而不是将{em>添加到tuple中的每个元素。

>>> a = (1,2)
>>> b = (3,4)
>>> a+b
(1, 2, 3, 4)

你需要类似下面的东西,它将每个tuple并排放置,遍历每对元素,然后找到它们的sum()(为清晰起见而打印):

>>> print(*map(sum, zip(a,b)), sep='\n')
4
6

您的代码中会出现这种情况:

root.geometry("+%d+%d" % (rootsize[0]+x, rootsize[1]+y))

答案 1 :(得分:0)

正在处理的字符串有两个表示占位符:rootsize + (x, y)但您只传递一个值root.geometry() - 这将只评估一个表达式。

根据root.geometry("+%d+%d" % (rootsize, (x, y))) # two separate args # Or... root.geometry("+%d" % (rootsize + (x, y))) # one arg 期待的内容,执行以下操作之一:

(x, y)

我假设"+%d" % (rootsize + (x, y)) # if rootsize is an instance of a class with # `__add__` defined and handles tuples added # to it; returning an int/numeric result, not # a tuple. seems UNLIKELY. see next... "+%d+%d" % (rootsize + x, rootsize + y) # two arguments each adding rootsize with x or y "+%d+%d+%d" % (rootsize, x, y) # three arguments 代表一个元组。其他选择是:

root.geometry()

(不知道"{{ URL('/blog/'.$post->slug')}}" 期望什么,不能进一步建议。)