我一直在为自己制作一个笔记记录程序,但是它很顺利但是我把所有的小部件放在我希望它们使用.pack()
或.grid()
选项的位置时遇到了很多问题.
环顾四周后,我发现我可以使用该.place()
选项.在我决定使用之前,.place()
我发现无数的论坛帖子说"不要使用.place()
! ".
我与其他选项保持不动,所以我决定.place()
尝试一下.事实证明.place()
,正是我需要解决我的布局问题,而我只是不明白为什么每个人都在讨厌.place()
这么多.
有什么本质上错误的.place()
吗?或者说人就是喜欢使用.pack()
和.grid()
超过易用性等一些实际原因是什么?
我很难发现是否可以使用TinyDB一次检查多个键值.目前我可以and
在这样的if
语句中使用以下方法检查多个字段:
def check_table(FNAME="NULL", LNAME="NULL", MNAME="NULL"):
if (HHK_STAFF.search(Query().FNAME == FNAME)) != [] \
and (HHK_STAFF.search(Query().MNAME == MNAME)) != [] \
and (HHK_STAFF.search(Query().LNAME == LNAME)) != []:
print(HHK_STAFF.search(Query().FNAME == FNAME)[0])
else:
print("user does not exist")
check_table(FNAME="Some", MNAME="Random", LNAME="Person")
Run Code Online (Sandbox Code Playgroud)
它做我想要的,但它接缝笨重.我希望TinyDB内置一些可以执行相同功能的东西,而不需要很多and
语句.
我正在尝试做类似的事情:
HHK_STAFF.search(where(("FNAME", "MNAME", "LNAME")) == (FNAME, MNAME, LNAME)))
Run Code Online (Sandbox Code Playgroud)
题:
是否有人知道一种方法Query()表的多个键值而不是一次只有一个?
你能列出这个信息的链接吗?如果它存在,我很难找到这些信息.
这是我与TinyDB的简单版本:
from tinydb import TinyDB, Query
#~~~~~~~~~~~~~~~~~~~~~~< CURRENT DBPATH >~~~~~~~~~~~~~~~~~~~~~~
DB = TinyDB('./DB_PATH/HHK_DB.json')
#~~~~~~~~~~~~~~~~~~~~~~< CURRENT TABLES >~~~~~~~~~~~~~~~~~~~~~~
HHK_STAFF = DB.table("HHK_STAFF")
HHK_STAFF.insert({'EMPLOYEE_ID':'00000001', 'FNAME': 'Some', 'LNAME':'Person', 'MNAME':'Random'})
def …
Run Code Online (Sandbox Code Playgroud) 因此,在几小时后或阅读帖子并查看 tkinter 的文档后,我发现在 Windows 机器上,由于滚动条直接从 Windows 获取其主题,tkinter 滚动条的颜色选项将不起作用。我的问题是默认主题的颜色确实与我的程序冲突,我试图找到一个解决方案,它不涉及导入不同的 GUI 包,例如 PyQt(我在工作时无法访问 pip,所以这是一个问题获取新包)
除了使用单独的包之外,任何人都可以向我指出一些有关如何编写自己的侧边栏以滚动文本小部件的文档。到目前为止,我所发现的甚至接近我想要做的就是对这个问题的答案。(使用 ttk 样式更改 tkinter 中滚动条的外观)
从我可以看到的例子只是改变了滚动条的背景,因此我仍然无法使用这个例子。我在用于配置样式的行之一上出错。
style.configure("My.Horizontal.TScrollbar", *style.configure("Horizontal.TScrollbar"))
TypeError: configure() argument after * must be an iterable, not NoneType
Run Code Online (Sandbox Code Playgroud)
不知道如何处理这个错误,因为我只是在关注用户的例子,我不确定为什么它对他们有用而不对我有用。
到目前为止我尝试过的是:
我如何创建我的文本框和滚动条。
root.text = Text(root, undo = True)
root.text.grid(row = 0, column = 1, columnspan = 1, rowspan = 1, padx =(5,5), pady =(5,5), sticky = W+E+N+S)
root.text.config(bg = pyFrameColor, fg = "white", font=('times', 16))
root.text.config(wrap=NONE)
vScrollBar = tkinter.Scrollbar(root, command=root.text.yview)
hScrollBar = tkinter.Scrollbar(root, orient = HORIZONTAL, …
Run Code Online (Sandbox Code Playgroud) 在发布之前,我确实搜索了很多示例,但仍然无法正确使用tkinter网格。
我想要的是:
我的代码:
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
b1 = ttk.Button(root, text='b1')
b1.grid(row=0, column=0, sticky=tk.W)
e1 = ttk.Entry(root)
e1.grid(row=0, column=1, sticky=tk.EW)
t = ttk.Treeview(root)
t.grid(row=1, column=0, sticky=tk.NSEW)
scroll = ttk.Scrollbar(root)
scroll.grid(row=1, column=1, sticky=tk.E+tk.NS)
scroll.configure(command=t.yview)
t.configure(yscrollcommand=scroll.set)
root.columnconfigure(0, weight=1)
root.columnconfigure(1, weight=1)
root.rowconfigure(1, weight=1)
root.mainloop()
Run Code Online (Sandbox Code Playgroud) 我为自己写了一个笔记工具作为我的第一个程序.它实际上在大多数情况下工作得很好,但有时程序会写一个额外的]
或者}
在所述文件的内部list
或dict
存储在所述json
文件的内部.
它并不经常发生,我认为只有当我编写新的代码行或更改读取/写入所述文件的现有行时才会发生这种情况.我不是100%肯定,但这就是它的样子.
例如,我有一个list
存储在一个文件中,我使用该indent=""
标志来确保,因为它编写文件,如果我必须编辑所述文件,它对我来说更具可读性.有时在更改某些代码或添加代码后运行我的程序时,我收到一条错误,指出文件中有"额外数据".错误看起来像这样:
raise JSONDecodeError("Extra data", s, end)
json.decoder.JSONDecodeError: Extra data: line 6 column 2 (char 5791)
Run Code Online (Sandbox Code Playgroud)
并且错误的原因将是这样的:
[
"Help",
"DataTypes",
"test",
"Variables",
]] # the error would be cause by this extra ] at the end of the list
Run Code Online (Sandbox Code Playgroud)
我不明白为什么程序有时会在我的json文件中的数据末尾添加和添加]或}?
当我打开文件或转储到文件时,我有什么问题吗?
以下是我用于打开文件和转储到文件的代码的一些部分:
path = "./NotesKeys/"
notebook = dict()
currentWorkingLib = ""
currentWorkingKeys = ""
#~~~~~~~~~~~~~~~~~~~< USE TO open all files in Directory >~~~~~~~~~~~~~~~~~~~
with open("%s%s"%(path,"list_of_all_filenames"), …
Run Code Online (Sandbox Code Playgroud) 我有一个包含多个框架的程序。一切正常,但是我无法弄清楚为什么其中一个框架周围的边框存在。
我已经尝试了几件事。
这是我的框架的创建方式:
kwListFrame = Frame(root)
kwListFrame.grid(row = 1, column = 0, rowspan = 1, columnspan = 1, sticky = N+S+E+W)
kwListFrame.columnconfigure(0, weight=1)
kwBGimage = Label(kwListFrame, image= baseBGimage)
kwBGimage.image = baseBGimage
kwBGimage.place(x = 0, y = 0)
kwBGimage.config(image = baseBGimage)
Run Code Online (Sandbox Code Playgroud)
我试图改变:
kwListFrame = Frame(root)
Run Code Online (Sandbox Code Playgroud)
到:
kwListFrame = Frame(root, highlightthickness=0)
#or
kwListFrame = Frame(root, padx=0, pady=0)
#or
kwListFrame = Frame(root, bd=0)
Run Code Online (Sandbox Code Playgroud)
在那之后没有工作我试过:
kwListFrame = Frame(root, highlightbackground= "some color that matches frame")
Run Code Online (Sandbox Code Playgroud)
我什至试图将浮雕设置为平坦,即使我知道它的默认值是平坦的。
由于我发现了几个关于在画布上移除边框的参考,我没有找到任何Frames
直接相关的内容。所以,我可能会使用highlightthickness
和highlightbackground
错误的,但因此它接缝像它应该做的伎俩也没有抛出一个错误。
这是框架在顶部显示细边框的方式的图像。
我不确定为什么会出现这个问题。是因为我使用图像作为背景吗? …
我目前有一个With语句,它将一个单元格的值与一系列单元格进行比较,InStr()
然后返回true,然后标记cell.Value
为" Yes"
如果不是那么"No"
.
这是场景.说我正在检查它的值,A2
这是111
.我正在与111
一系列其他单元格进行比较,并且应该匹配的字段是111, 222, 333
包含111
在其中的字段.我下面的第一组代码适用于此但速度很慢.我希望有一个更快的方式,我认为我可以用公式做到这一点,但使用True
而不是False
在vlookup中使用不像我想的那样.
这是代码:
With inv_twcg_ws
For Each cell In .Range("A2:A" & .Cells(Rows.Count, "A").End(xlUp).Row)
For Each cellx In report_rng
If InStr(cellx.Value, cell.Value) Then
cell.Offset(0, 6).Value = "Yes"
Exit For
End If
cell.Offset(0, 6).Value = "No"
Next cellx
Next cell
End With
Run Code Online (Sandbox Code Playgroud)
问题是它有点慢.我的应用程序需要大约5分钟才能运行.我希望能结合InStr()
与Application.Vlookup()
以某种方式,试图加快配方.这可能吗?
这是我目前的Vlookup,但使用True
不接缝来满足我的需求......
With inv_twcg_ws
For Each cell In .Range("G2:G" & …
Run Code Online (Sandbox Code Playgroud) 我一定想念一些东西,因为PyCharm报告变量未使用,但实际上已在下一行使用。
知道为什么PyCharm这样报告吗?是一个错误还是我做了一些需要更改的事情?
码:
def start_mass_reassign(self):
try:
or_dns = cx_Oracle.makedsn('REDACTED', REDACTED, service_name='REDACTED')
con = cx_Oracle.connect(user=self.username.get(), password=self.password.get(), dsn=or_dns)
valid_login = True
except cx_Oracle.DatabaseError as e:
if 'invalid username/password' in str(e).lower():
print('Invalid login')
valid_login = False
else:
valid_login = False
raise
if valid_login:
# rest of code verified works fine.
Run Code Online (Sandbox Code Playgroud)
PyCharm报告的通知图像。
正如lmiguelvargasf
我建议的那样,我尝试使用不同的值,但是并没有消除错误。
我试图找到一些有关tk.mainloop()
vs 的使用的问题或解答root.mainloop()
,但没有成功。
我的问题是:这两种用途之间有什么区别吗?对我来说,正确的方法是使用tk_instance_variable_name.mainloop()
vs只是做,tk.mainloop()
但是从我看来,两者似乎都很好。有什么理由需要避免tk.mainloop()
还是仅仅是一种偏爱。
如果之前已经问过这个问题,请提供Q / A链接,因为我无法找到它。我觉得它已经被问过了,但是没有运气。
有人可以解释一下为什么tk.mainloop()
会在这里工作的原因是,我感觉它不应该在tk实例变量名上使用,但我不应该这样做。
root
按预期使用工作的示例:
import tkinter as tk
root = tk.Tk()
tk.Label(root, text="Test").pack()
root.mainloop() # using the variable name root
Run Code Online (Sandbox Code Playgroud)
tk
据我所知,使用示例的效果很好:
import tkinter as tk
root = tk.Tk()
tk.Label(root, text="Test").pack()
tk.mainloop() # using tk
Run Code Online (Sandbox Code Playgroud) 我不确定我的代码如何跳过列表中的第一项...
我尝试检查值是否与列表中的第一项相同,并尝试检查索引零,但都跳过第一个值。
我一直在看这个。我错过了一些明显的东西吗?
使用enumerate
和检查index
.
def threaded_query(self):
for ndex, query_key in enumerate(['Acct #', 'Results', 'Final Results', 'IPAccts']):
if ndex == 0:
write_to_table = pow_query_dict[query_key].format(self.login, self.value)
else:
write_to_table = pow_query_dict[query_key].format(self.login)
conn = pyodbc.connect(driver='{ODBC Driver 17 for SQL Server}', host='myserver',
database='myDB', trusted_connection='yes')
with conn:
try:
conn.autocommit = True
cursor = conn.cursor()
cursor.execute(write_to_table)
print('Committed {} data to SQL Server tables.'.format(query_key))
except BaseException as e:
print('Query failed with Exception: {}'.format(e))
Run Code Online (Sandbox Code Playgroud)
检查列表中第一项的确切值的示例:
def threaded_query(self):
for query_key in ['Acct #', 'Results', 'Final Results', …
Run Code Online (Sandbox Code Playgroud)