我创建了一个2维数组,如:
rows =3
columns= 2
mylist = [[0 for x in range(columns)] for x in range(rows)]
for i in range(rows):
for j in range(columns):
mylist[i][j] = '%s,%s'%(i,j)
print mylist
Run Code Online (Sandbox Code Playgroud)
打印此列表会显示输出:
[ ['0,0', '0,1'], ['1,0', '1,1'], ['2,0', '2,1'] ]
Run Code Online (Sandbox Code Playgroud)
其中每个列表项都是"行,列"格式的字符串
现在给出这个列表,我想按顺序迭代它:
'0,0'
'1,0'
'2,0'
'0,1'
'1,1'
'2,1'
Run Code Online (Sandbox Code Playgroud)
这是迭代第一列然后第二列,依此类推.我如何用循环做到这一点?
这个问题属于纯python列表,而标记为相同的问题属于numpy数组.他们显然是不同的
考虑这个简单的代码:
from Tkinter import *
import ttk
root= Tk()
ttk.Label(root, text='Heading Here').grid(row=1, column=1)
ttk.Separator(root,orient=HORIZONTAL).grid(row=2, columnspan=5)
root.mainloop()
Run Code Online (Sandbox Code Playgroud)
当我运行此代码时,分隔符几乎不可见.

我用红色箭头标记它,如果你能看到它是一个小点类的东西.
如何使分隔符跨越整个水平宽度,或者至少可见?
试图学习tkinter和python.我想在相邻的框架中显示文本小部件的行号
from Tkinter import *
root = Tk()
txt = Text(root)
txt.pack(expand=YES, fill=BOTH)
frame= Frame(root, width=25)
#
frame.pack(expand=NO, fill=Y, side=LEFT)
root.mainloop()
Run Code Online (Sandbox Code Playgroud)
我在一个名为unpythonic的网站上看到了一个例子,但它假设txt的行高为6像素.
我正在尝试这样的事情:
1)将Any-KeyPress事件绑定到返回按键发生的行的函数:
textPad.bind("<Any-KeyPress>", linenumber)
def linenumber(event=None):
line, column = textPad.index('end').split('.')
#creating line number toolbar
try:
linelabel.pack_forget()
linelabel.destroy()
lnbar.pack_forget()
lnbar.destroy()
except:
pass
lnbar = Frame(root, width=25)
for i in range(0, len(line)):
linelabel= Label(lnbar, text=i)
linelabel.pack(side=LEFT)
lnbar.pack(expand=NO, fill=X, side=LEFT)
Run Code Online (Sandbox Code Playgroud)
不幸的是,这会在帧上给出一些奇怪的数字.有更简单的解决方案吗?怎么解决这个问题?
我有一个元组列出了类的方法,如:
t = ('methA','methB','methC','methD','methE','methF')
Run Code Online (Sandbox Code Playgroud)
等等..
现在我需要根据用户选择动态调用这些方法.将根据索引调用这些方法.因此,如果用户选择"0",methA则调用(如果为"5" methF).
我这样做的方法如下:
def makeSelection(self, selected):
#methodname = t[selected]
#but as this is from within the class , it has to be appended with 'self.'methodname
# also need to pass some arguments locally calculated here
Run Code Online (Sandbox Code Playgroud)
我已经设法解决了一些事情,eval但它产生错误并且一点也不优雅.
这应该很简单,但我真的很难做到正确.我只需要一个简单的ttk ComboBox,它可以根据选择的变化更新变量.
在下面的示例中,我需要value_of_combo每次进行新选择时自动更新变量的值.
from Tkinter import *
import ttk
class App:
value_of_combo = 'X'
def __init__(self, parent):
self.parent = parent
self.combo()
def combo(self):
self.box_value = StringVar()
self.box = ttk.Combobox(self.parent, textvariable=self.box_value)
self.box['values'] = ('X', 'Y', 'Z')
self.box.current(0)
self.box.grid(column=0, row=0)
if __name__ == '__main__':
root = Tk()
app = App(root)
root.mainloop()
Run Code Online (Sandbox Code Playgroud) 我有一个tkinter spinbox:
sb = Spinbox(frame, from_=1, to=12)
Run Code Online (Sandbox Code Playgroud)
我想将spinbox的默认值设置为4.我该怎么做?
我已经读过布莱恩建议设置的这个帖子
Tkinter.Spinbox(values=(1,2,3,4))
sb.delete(0,"end")
sb.insert(0,2)
Run Code Online (Sandbox Code Playgroud)
但我没有得到它背后的逻辑.
什么有删除和插入与设置默认值?
任何进一步的见解将不胜感激.
谢谢
假设我有两个A和B类:
Class A:
# A's attributes and methods here
Class B:
# B's attributes and methods here
Run Code Online (Sandbox Code Playgroud)
现在我可以在B类对象中评估A的属性,如下所示:
a_obj = A()
b_obj = B(a_obj)
Run Code Online (Sandbox Code Playgroud)
我需要的是双向访问.如何访问A中B和B属性中的A属性?
这里有类似的问题,但没有一个适合我的特定情况.
我有一个带有按钮的Windows窗体.该按钮附加到事件处理程序,如下所示:
private void mybutton_Click(object sender, EventArgs e)
{
// do some processing here
}
Run Code Online (Sandbox Code Playgroud)
此外,还有一个组合框,其中选择的变化应该触发如上定义的按钮事件处理程序.
private void mycombobox_SelectedIndexChanged(object sender, EventArgs e)
{
mybutton_Click(sender, e); // this is the line which pops up the dialog
}
Run Code Online (Sandbox Code Playgroud)
代码在运行时完全按预期工作,但我在编译时得到一个对话框提示,其中显示:
你调用的对象是空的
没有其他错误或警告.
谷歌搜索告诉我,如果程序试图访问设置为null的引用类型变量的成员,则此消息是错误.
但是,当我在调试模式下运行此代码时,发送方和事件(e)变量都不为空.
那么为什么会弹出这个对话框呢?
如果这是一个错误或警告 - 它应该显示为错误或警告但不会发生这种情况.
这是截图:

编辑:回答评论中提出的问题
您可以在屏幕截图中看到没有错误.
该程序运行良好 - 只需弹出这个
弹出窗口是由line:mybutton_Click(sender, e);在组合框selectedIndexChanged功能中引起的.
在处理过程mybutton_Click(sender, e)中不使用任何发送者或e参数.
我还没有安装任何VS扩展.
我希望以下程序退出<Any-KeyPress>活动.
from tkinter import *
root = Tk()
root.overrideredirect(True)
root.bind('<Any-KeyPress>', lambda e: root.destroy())
root.mainloop()
Run Code Online (Sandbox Code Playgroud)
这适用于Windows操作系统.但是,除非我root.overrideredirect(True)从上面的代码中删除该行,否则这在Ubuntu上不起作用.
这是预期的行为吗?
或者有没有办法让我的程序在仍然使用的同时工作root.overrideredirect(True)?
编辑
我刚刚在SO看到了类似的问题,Bryan Oakley建议使用root.focus_force()它,但它没有帮助.
编辑2
我使用的root.attributes('-fullscreen', True)不是root.overrideredirect(True)像这里建议的那样,现在似乎有效.
我想一次运行四个不同的脚本文件中的4个不同的服务器脚本.
我尝试按如下方式设置运行配置:
但是,由于服务器在循环中监听,因此四个程序中的每一个都是阻塞的.
在当前设置中(如上所示),Pycharm运行在下面的"Before Launch"部分中指定的第一个服务器并停在它.
有没有办法一次运行所有四个服务器脚本Run Configurations?