【发布时间】:2011-11-16 14:59:57
【问题描述】:
我正在尝试使用 tkinter python 2.7 编写一个带有嵌入在代码中的数据库数组的 GUI 可搜索细菌数据库。通过单选按钮选择某些标准选择性地搜索阵列,然后点击“识别”按钮应打印出与这些选择匹配的所有细菌的 ID 作为标签。
我在下面发布了非功能性的 sn-p [idbuttonclick(self)]。
sn-p def idbuttonclick(self) 应该做什么:
1) 搜索名为“data”的矩阵/数组,其中第 1-4 列代表一个单选按钮字符串变量选项,每行代表一个细菌 id
2) 选择“数据”中变量选项与单选按钮选择匹配的行
3) 如果 id 的数量为 1-20,则将所选行中数据列 0 中的细菌 id 作为标签打印在 self.id_frame 中。否则,打印消息标签“错误:数据不足”。
def idbuttonclick(self):
def column(matrix, i):
if column(data, 1)!=self.gram_option.get(): line.destroy()
if column(data, 2)!=self.meta_option.get(): line.destroy()
if column(data, 3)!=self.cat_option.get(): line.destroy()
if column(data, 4)!=self.oxi_option.get(): line.destroy()
column(data, 0)==id
if id.count >= 20 or id.count == 0:
Label(self.id_frame, text = "Error: Not enough data", background = "white").pack(side=TOP, anchor = N)
else: Label(self.id_frame, text = id, background = "white").pack(side=TOP, anchor = N)
我已经获得了代码,可以根据单选按钮选择为我提供 id.frame 标签,但仍然无法将单选按钮选择链接到数组中的坐标,然后根据单选按钮/数组坐标匹配提供 id.frame 标签.
它现在特别是一个数组,而不是矩阵,因为矩阵和列表和元组的列表显然不能使用坐标索引 (i,j) 来存储元素。
下面是我的新草稿,其中包括数组和 idbutton 点击命令。
这应该如何工作:
如果选择了单选按钮 self.gram_option=('+'),则数组第 1 列中的任何细菌名称在同一行内的数组第 2 列中具有“+”值应出现在 id.frame 标签中。
因此,标签应为:“醋酸醋杆菌,假单胞菌。”
此外,单击 self.meta_option.get() 应对应于第 2 列,缩小选择范围:“fac anaerobe”值将标记为“Acetobacter aceti”,“aerobe”值将标记为“Pseudomonas sp.”。
data = array([
['Acetobacter aceti','+', 'fac anaerobe', '+', '--'],
['Citrobacter freundii','--', 'fac anaerobe', '+', '--'],
['Pseudomonas sp','+', 'aerobe', '--', '--']])
data.readlines()
def idbuttonclick(self, event):
self.id_frame.destroy()
self.id_frame = Frame(self.main_right_frame, borderwidth=5, height=50, background="white")
self.id_frame.pack(side=TOP, fill=BOTH)
if data[i,1]==self.gram_option.get():
id = data [i,0]
Label(self.id_frame, text = id, background = "white").pack(side=LEFT, anchor = N)
if data[i,2]==self.shape_option.get():
id = data [i,0]
Label(self.id_frame, text = id, background = "white").pack(side=LEFT, anchor = N)
if data[i,3]==self.meta_option.get():
id = data [i,0]
Label(self.id_frame, text = id, background = "white").pack(side=LEFT, anchor = N)
if data[i,4]==self.cat_option.get():
id = data [i,0]
Label(self.id_frame, text = id, background = "white").pack(side=LEFT, anchor = N)
else: Label(self.id_frame, text = 'Error: Not enough data', background = "white").pack(side=LEFT, anchor = N)
如果我没有正确说明我的数组坐标,或者有人知道在 python 代码中安排上述场景的可行方法...... 在大约两周的时间里,我在这个问题上获得了 56 次意见,但没有来自社区的代码编写反馈。希望这个新版本能更好地解决我最初的想法和需要调整的地方。
此致,
杰夫
【问题讨论】:
-
你考虑过Enthought Traits吗?它随 Python(x,y) 一起提供,让设计简单的 GUI 变得更加容易。
-
你的问题不是很清楚。当您说您在“让单选按钮和数组交互”时遇到问题时,您是什么意思?什么样的问题?什么样的互动?具体来说,您希望发生哪些没有发生的事情?
-
@Bill - 你复制了我之前的编辑。 :) 回滚。
-
@razlebe:哎呀!我们有一个工具,我们可以单击以自动将答案转换为编辑。通常人们不会标记和编辑,所以我们只是使用该工具而不检查编辑是否已经发生。无论如何,感谢您修复它。 :)
-
你的问题还是很模糊。就好像您要求我们为您编写代码一样。具体有什么不明白的?您是否无法从单选按钮 StringVars 中获取值?您不知道如何进行实际的搜索或打印吗?也许您可以将这些问题分别放在单独的问题中。
标签: python arrays radio-button tkinter