- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
昨天我在将两个不同的类插入笔记本时遇到问题。不幸的是问题仍然存在。您可以通过以下链接找到它:
我已遵循建议,我修改了代码,删除了从计算中检索值的按钮(不必要)。现在我已经添加了一个条目(顺便说一下,这不起作用),并且还删除了不必要的导入等等。尽管如此,该脚本不起作用,也没有将类插入笔记本内的框架中。希望你能帮助我!
提前致谢
赫克托
这是代码:
from Tkinter import *
import Tkinter as tk
import ttk
import tkFont
import tkMessageBox
import sys
import math
def defocus(event):
event.widget.master.focus_set()
root = tk.Tk()
root.title("Autana")
f= tkFont.Font(family="verdana", size=12,weight=tkFont.BOLD)
f2= tkFont.Font(family="Times", size=20, weight=tkFont.BOLD)
c1= 'PeachPuff2'
notebook = ttk.Notebook(root)
notebook.pack(fill='both', expand=True)
notebook.pressed_index = None
ContainerOne = ttk.Frame(notebook);
ContainerOne.pack(fill='both', expand=True);
notebook.add(ContainerOne, text='Standard Reliability')
canvas1 = tk.Canvas(ContainerOne, width=950, height=450,bg=c1)
scroll = ttk.Scrollbar(ContainerOne, command=canvas1.yview)
canvas1.config(yscrollcommand=scroll.set, scrollregion=(0,0,100,1000))
canvas1.pack(side='left', fill='both', expand=True)
scroll.pack(side='right', fill='y')
frameOne = tk.Frame(canvas1, width=900, height=450)#,bg=c1,bd=22)
canvas1.create_window(630, 270, window=frameOne)
class MyListbox:
def __init__(self, parent):
self.parent = parent
self.myData= (
["1", "Jhon Doe", "Madrid", "0341-672541", "6 SD"],
["5", "Kenji S.", "Tokyo", "0341-213212", "10 SD"])
self.establishment()
def combobox_handler(self, event):
current = self.combobox.current()
self.entNumber.delete(0, 'end')
self.entName.delete(0, 'end')
self.entCity.delete(0, 'end')
self.entTel.delete(0, 'end')
self.entAddress.delete(0, 'end')
self.entNumber.insert('end', self.myData[current][0])
self.entName.insert('end', self.myData[current][1])
self.entCity.insert('end', self.myData[current][2])
self.entTel.insert('end', self.myData[current][3])
self.entAddress.insert('end', self.myData[current][4])
def establishment(self):
mainFrame = ttk.Frame(self.parent)
mainFrame.pack(fill='both', expand='yes')
fr_left = ttk.Frame(mainFrame)
fr_left.pack(fill='both', expand='yes', side='left')
names = [person[1] for person in self.myData]
self.combobox = ttk.Combobox(fr_left, values=names)
self.combobox.bind('<<ComboboxSelected>>', self.combobox_handler)
self.combobox.pack()
self.combobox.set("Data People")
fr_right = ttk.Frame(mainFrame)
fr_right.pack(fill='both', expand='yes', side='right')
fr_up = ttk.Frame(fr_right)
fr_up.pack(side='top', expand='yes')
ttk.Label(fr_up, text='List Number').grid(row=0, column=0, sticky='w')
self.entNumber = ttk.Entry(fr_up)
self.entNumber.grid(row=0, column=1)
ttk.Label(fr_up, text='Name').grid(row=1, column=0, sticky='w')
self.entName = ttk.Entry(fr_up)
self.entName.grid(row=1, column=1)
ttk.Label(fr_up, text='City').grid(row=2, column=0, sticky='w')
self.entCity = ttk.Entry(fr_up)
self.entCity.grid(row=2, column=1)
ttk.Label(fr_up, text='No. Tel').grid(row=3, column=0, sticky='w')
self.entTel = ttk.Entry(fr_up)
self.entTel.grid(row=3, column=1)
ttk.Label(fr_up, text='Address').grid(row=4, column=0, sticky='w')
self.entAddress = ttk.Entry(fr_up)
self.entAddress.grid(row=4, column=1)
class Calculation:
def __init__(self, parent):
self.parent = parent
self.Value1()
self.Value2()
self.Result()
ttk.Label(self.parent,text='Num 1').grid(column=2, row=5, sticky='w', pady=3)
ttk.Label(self.parent,text='Num 2').grid(column=2, row=6, sticky='w', pady=3)
ttk.Label(self.parent,text='Result').grid(column=9,row=9, sticky='w', pady=3)
self.msg = Label(self.parent,text='Sum of 2 number')
self.msg.grid(row=3,column=1,columnspan=2)
self.entry = ttk.Entry(text='Calculate',width=8,command=self.Calc)
self.entry.grid(row=9,column=2,padx=2,pady=3)
def Value1(self):
self.field1 = ttk.Combobox(self.parent)
self.field1['values'] = ('5', '6', '7')
self.field1.grid(column=3, row=5)
def Value2(self):
self.field2 = ttk.Combobox(self.parent)
self.field2['values'] = ('1', '2', '3')
self.field2.grid(column=3, row=6)
def Result(self):
self.entry = StringVar()
self.entry = ttk.Entry(self.parent, textvariable = self.entry)
self.entry.grid(column=3, row=9)
def Calc(self):
self.entry.delete(0, 'end')
try:
value = int(self.field1.get()) + int(self.field2.get())
except ValueError:
self.entry.insert(0, 'Input numbers.')
else:
self.entry.insert(0, str(value))
if __name__ == '__main__':
stepOne = ttk.LabelFrame(frameOne, text=" 1. Select People: ")
stepOne.grid(row=0, column=5, sticky='nsew', \
padx=5, pady=5, ipadx=5, ipady=5)
stepTwo = ttk.LabelFrame(frameOne, text=" 2. Calculation : ")
stepTwo.grid(row=7, column=5, sticky='w', \
padx=5, pady=5, ipadx=5, ipady=5)
app = MyListbox(stepOne)
app2 = Calculation (stepOne)
root.mainloop()
最佳答案
这段代码中存在太多错误,我们无法为您提供帮助。既然您显然正在挣扎,让我给您一些建议:不要尝试立即构建整个应用程序。一次专注于一个部分,把它做好,然后继续前进。
例如,重新开始您的应用并创建主窗口和笔记本,仅此而已。让那部分工作起来。为您的两个笔记本选项卡创建一个虚拟框架,只是为了证明您的笔记本可以正常工作并且您了解如何添加选项卡。在这个简单的程序按照您的预期工作、调整大小、启动和停止之前,不要执行任何其他操作。为您创建的每个小部件指定独特的背景颜色,以便您可以直观地看到每个小部件。
例如:
import Tkinter as tk
import ttk
root = tk.Tk()
notebook = ttk.Notebook(root)
notebook.pack(fill="both", expand=True)
tab1 = tk.Frame(notebook, background="red")
tab2 = tk.Frame(notebook, background="green")
notebook.add(tab1, text="Tab 1")
notebook.add(tab2, text="Tab 2")
root.mainloop()
让我强调一下:在你完成该工作并理解代码的作用之前,不要做任何其他事情
一旦您对此感到满意,您现在就可以专注于其中一个选项卡。每个选项卡都以一个框架开始,因此创建一个仅创建框架的函数。让此函数返回框架,而不是将框架打包或网格化到父级中。根据经验,您永远不应该在其父级中包含函数或类包/网格本身,因为这会使您的代码难以理解和修改。让每个框架成为一个独立的东西,并让创建它的代码决定如何布局它。相信我,用这种方式编写 GUI 容易得多。
例如:
def tab1(parent):
frame = tk.Frame(parent, background="pink")
return frame
然后将代码修改为如下所示:
import Tkinter as tk
import ttk
<put your definition of tab1 here...>
root = tk.Tk()
notebook = ttk.Notebook(root)
notebook.pack(fill="both", expand=True)
tab1 = tab1(notebook)
tab2 = tk.Frame(notebook, background="green")
notebook.add(tab1, text="Tab 1")
notebook.add(tab2, text="Tab 2")
root.mainloop()
好的,现在停止,运行该代码,并确保您了解发生了什么。一切还有效吗?现在,在 tab1
的空行中,您可以添加此容器的所有小部件。您可以将它们打包或网格化在框架内,而不必将所有这些都传递出去。您只需将容器传递给调用者即可。最终您可以学习如何创建 tk.Frame 的子类而不是使用函数,但现在不用担心。如果您遵循这种编码风格,将来切换到面向对象风格将非常轻松。
继续这样工作,一次构建一件作品。尽可能频繁地停止并运行代码,确保它仍然可以正确调整大小并按照您想要的方式布局。分别处理每个部分,最终它们会完美地协同工作。
关于python - 使用 Tkinter 和 Python 将同一框架内的两个不同类插入笔记本时仍然存在问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17069352/
SQLite、Content provider 和 Shared Preference 之间的所有已知区别。 但我想知道什么时候需要根据情况使用 SQLite 或 Content Provider 或
警告:我正在使用一个我无法完全控制的后端,所以我正在努力解决 Backbone 中的一些注意事项,这些注意事项可能在其他地方更好地解决......不幸的是,我别无选择,只能在这里处理它们! 所以,我的
我一整天都在挣扎。我的预输入搜索表达式与远程 json 数据完美配合。但是当我尝试使用相同的 json 数据作为预取数据时,建议为空。点击第一个标志后,我收到预定义消息“无法找到任何内容...”,结果
我正在制作一个模拟 NHL 选秀彩票的程序,其中屏幕右侧应该有一个 JTextField,并且在左侧绘制弹跳的选秀球。我创建了一个名为 Ball 的类,它实现了 Runnable,并在我的主 Draf
这个问题已经有答案了: How can I calculate a time span in Java and format the output? (18 个回答) 已关闭 9 年前。 这是我的代码
我有一个 ASP.NET Web API 应用程序在我的本地 IIS 实例上运行。 Web 应用程序配置有 CORS。我调用的 Web API 方法类似于: [POST("/API/{foo}/{ba
我将用户输入的时间和日期作为: DatePicker dp = (DatePicker) findViewById(R.id.datePicker); TimePicker tp = (TimePic
放宽“邻居”的标准是否足够,或者是否有其他标准行动可以采取? 最佳答案 如果所有相邻解决方案都是 Tabu,则听起来您的 Tabu 列表的大小太长或您的释放策略太严格。一个好的 Tabu 列表长度是
我正在阅读来自 cppreference 的代码示例: #include #include #include #include template void print_queue(T& q)
我快疯了,我试图理解工具提示的行为,但没有成功。 1. 第一个问题是当我尝试通过插件(按钮 1)在点击事件中使用它时 -> 如果您转到 Fiddle,您会在“内容”内看到该函数' 每次点击都会调用该属
我在功能组件中有以下代码: const [ folder, setFolder ] = useState([]); const folderData = useContext(FolderContex
我在使用预签名网址和 AFNetworking 3.0 从 S3 获取图像时遇到问题。我可以使用 NSMutableURLRequest 和 NSURLSession 获取图像,但是当我使用 AFHT
我正在使用 Oracle ojdbc 12 和 Java 8 处理 Oracle UCP 管理器的问题。当 UCP 池启动失败时,我希望关闭它创建的连接。 当池初始化期间遇到 ORA-02391:超过
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 9 年前。 Improve
引用这个plunker: https://plnkr.co/edit/GWsbdDWVvBYNMqyxzlLY?p=preview 我在 styles.css 文件和 src/app.ts 文件中指定
为什么我的条形这么细?我尝试将宽度设置为 1,它们变得非常厚。我不知道还能尝试什么。默认厚度为 0.8,这是应该的样子吗? import matplotlib.pyplot as plt import
当我编写时,查询按预期执行: SELECT id, day2.count - day1.count AS diff FROM day1 NATURAL JOIN day2; 但我真正想要的是右连接。当
我有以下时间数据: 0 08/01/16 13:07:46,335437 1 18/02/16 08:40:40,565575 2 14/01/16 22:2
一些背景知识 -我的 NodeJS 服务器在端口 3001 上运行,我的 React 应用程序在端口 3000 上运行。我在 React 应用程序 package.json 中设置了一个代理来代理对端
我面临着一个愚蠢的问题。我试图在我的 Angular 应用程序中延迟加载我的图像,我已经尝试过这个2: 但是他们都设置了 src attr 而不是 data-src,我在这里遗漏了什么吗?保留 d
我是一名优秀的程序员,十分优秀!