- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在修改一个现有的应用程序,该应用程序查询数据库并返回过去 7 天的信息。我已经合并了一个日历应用程序,以便人们可以选择自己的日期进行查询。
日历运行良好
import tkinter as Tkinter
import tkinter.font as tkFont
import tkinter.ttk as ttk
import ttkcalendar
import pandas as pd
import numpy as np
import tkSimpleDialog
from datetime import date
class CalendarDialog(tkSimpleDialog.Dialog):
"""Dialog box that displays a calendar and returns the selected date"""
def body(self, master):
self.calendar = ttkcalendar.Calendar(master)
self.calendar.pack()
def apply(self):
self.result1 = self.calendar.selection
self.result2 = self.calendar.selection
class CalendarFrame(Tkinter.LabelFrame):
def __init__(self, parent):
Tkinter.LabelFrame.__init__(self, parent, text="Choose Dates")
def getbegindate():
cd = CalendarDialog(self)
self.result1 = cd.result1
self.Begin_date.set(self.result1.strftime("%m/%d/%Y"))
def gettodate():
cd = CalendarDialog(self)
self.result2 = cd.result2
self.To_date.set(self.result2.strftime("%m/%d/%Y"))
self.Begin_date = Tkinter.StringVar()
self.To_date = Tkinter.StringVar()
def get_date():
end = self.result2.strftime("%m/%d/%Y")
start = self.result1.strftime("%m/%d/%Y")
end1 = self.result2.strptime(end, "%m/%d/%Y").date()
start1 = self.result1.strptime(start, "%m/%d/%Y").date()
delta = (end1 - start1).days
daterange = [pd.date_range(start, end)]
for single_date in daterange:
x = single_date.strftime("%m/%d/%Y")
rundate = x
print(rundate)
Tkinter.Button(self, text="From date", command=getbegindate).grid(column=0, row=0)
Tkinter.Entry(self, textvariable=self.Begin_date).grid(column=1, row=0)
Tkinter.Entry(self, textvariable=self.To_date).grid(column=1, row=1)
Tkinter.Button(self, text="To date", command=gettodate).grid(column=0, row=1)
Tkinter.Button(self, text="SUBMIT", command=get_date).grid(column=0, columnspan=3)
def main():
root = Tkinter.Tk()
root.wm_title("Pick1")
root.geometry("250x150+100+100")
CalendarFrame(root).grid()
root.mainloop()
if __name__ == "__main__":
main()
回溯 7 天后,weeklyrpt 仍然可以正常工作。
选择日期范围后,它将返回“无”并返回未填充的屏幕。如何从日历 (Pick1.py) 获取日期来填充我的查询
app_window = tk.Tk()
app_window.withdraw()
def rundate():
result = tkinter.messagebox.askyesno(title="Rundate", message="back 7 days?")
# result = tkinter.messagebox.askyesno()
if result == True:
rundate = date.today() - timedelta(7)
return rundate
else:
os.system("pick1.py")
def get_date():
end = self.result2.strftime("%m/%d/%Y")
start = self.result1.strftime("%m/%d/%Y")
daterange = [pd.date_range(start, end)]
for single_date in daterange:
x = single_date.strftime("%m/%d/%Y")
rundate = x
return rundate
rundate = rundate()
print(rundate)
# Query permits made effective since rundate
query = '''select `NPDES_ID`, `EffectiveDate`, `FacilityName`, `StateFacilityID`, `City`, `CountyName`
from Permits
where `EffectiveDate` >= ?
order by `NPDES_ID`'''
IDS=[]
FacCodes=[]
PermStrings=[]
PayStrings=[]
OwnerStrings=[]
MTB=[]
MTG=[]
MTR=[]
SWC=[]
MT0=[]
count=0
# for each row in result of query
for row in cur.execute(query, (rundate, )):
try:
d= row[1].strftime('%m/%d/%Y')
except:
d=""
# create a display string with the appropriate information permit # - date - facility name - city, county
for i in range(len(row)):
if not row[i]:
row[i] = ""
permitstring=row[0]+" | "+d+"\t | "+row[2]+"\t | "+row[4]+", "+row[5]+" County"
IDS.append(row[0])
tempid=row[0]
# add the index to the appropriate permit type array, used to display seperately
if tempid[0:3]=="MTB":
MTB.append(count)
if tempid[0:3]=="MTG":
MTG.append(count)
if tempid[0:4]=="MTR0":
MTR.append(count)
if tempid[0:3]=="MT0" or tempid[0:3]=="MT4" or tempid[0:3]=="MTX":
MT0.append(count)
if tempid[0:4]=="MTR1":
SWC.append(count)
FacCodes.append(row[3])
PermStrings.append(permitstring)
count+=1
这是一个相当大的应用程序,所以我希望包含重要的部分来看看我失败的地方
最佳答案
我修复了你的代码,现在它可以工作了,但我会尽可能少地进行更改以使其正常工作。大多数问题都是由类和面向对象编程的错误使用引起的。所以我认为如果我为你重写整个程序不会有任何帮助,但我认为你应该自己学习Python中的OOP编程。您可以在这些页面上找到一些基础知识( learnpython 、 tutorialspoint 、 introtopython ),或者只需输入 google,您就会找到很多页面、视频、类(class)等。
这是固定代码:
import pick1 ## This import line you need so you can use code from that file
app_window = tk.Tk()
#app_window.withdraw() ## we use these three lines below because we only want to hide
app_window.geometry("1x1+0+0") ## tkinter window temporarily and withdraw() method causes
app_window.overrideredirect(True) ## the window to beforgotten about by the window manager
app_window.transient() ## more details on https://wiki.tcl.tk/3175
def rundate():
result = tkinter.messagebox.askyesno(title="Rundate", message="back 7 days?")
#result = messagebox.askyesno(title="Rundate", message="back 7 days?")
# result = tkinter.messagebox.askyesno()
if result == True:
rundate = date.today() - timedelta(7)
return rundate
else:
#os.system("pick1.py")
#root = tkinter.Tk()
app_window.wm_title("Pick1")
app_window.geometry("250x150+100+100")
app_window.overrideredirect(False)
#app_window.mainloop()
cm = pick1.CalendarFrame(app_window)
cm.grid()
## here we wait until user has selected data range and
## and rundate has been calculated
app_window.wait_variable(cm.wait_for_result)
return cm.rundate
## we don't need this function because there is already same function in file pick1.py
## def get_date():
## end = self.result2.strftime("%m/%d/%Y")
## start = self.result1.strftime("%m/%d/%Y")
## daterange = [pd.date_range(start, end)]
## for single_date in daterange:
## x = single_date.strftime("%m/%d/%Y")
## rundate = x
## return rundate
rundate = rundate()
print(rundate)
# Query permits made effective since rundate
query = '''select `NPDES_ID`, `EffectiveDate`, `FacilityName`, `StateFacilityID`, `City`, `CountyName`
from Permits
where `EffectiveDate` >= ?
order by `NPDES_ID`'''
IDS=[]
FacCodes=[]
PermStrings=[]
PayStrings=[]
OwnerStrings=[]
MTB=[]
MTG=[]
MTR=[]
SWC=[]
MT0=[]
count=0
# for each row in result of query
for row in cur.execute(query, (rundate, )):
try:
d= row[1].strftime('%m/%d/%Y')
except:
d=""
# create a display string with the appropriate information permit # - date - facility name - city, county
for i in range(len(row)):
if not row[i]:
row[i] = ""
permitstring=row[0]+" | "+d+"\t | "+row[2]+"\t | "+row[4]+", "+row[5]+" County"
IDS.append(row[0])
tempid=row[0]
# add the index to the appropriate permit type array, used to display seperately
if tempid[0:3]=="MTB":
MTB.append(count)
if tempid[0:3]=="MTG":
MTG.append(count)
if tempid[0:4]=="MTR0":
MTR.append(count)
if tempid[0:3]=="MT0" or tempid[0:3]=="MT4" or tempid[0:3]=="MTX":
MT0.append(count)
if tempid[0:4]=="MTR1":
SWC.append(count)
FacCodes.append(row[3])
PermStrings.append(permitstring)
count+=1
pick1.py 的代码:
import tkinter as Tkinter
import tkinter.font as tkFont
import tkinter.ttk as ttk
import ttkcalendar
import pandas as pd
import numpy as np
import tkSimpleDialog
from datetime import date
class CalendarDialog(tkSimpleDialog.Dialog):
"""Dialog box that displays a calendar and returns the selected date"""
def body(self, master):
self.calendar = ttkcalendar.Calendar(master)
self.calendar.pack()
def apply(self):
self.result1 = self.calendar.selection
self.result2 = self.calendar.selection
class CalendarFrame(Tkinter.LabelFrame):
def __init__(self, parent):
Tkinter.LabelFrame.__init__(self, parent, text="Choose Dates")
self.parent = parent
self.Begin_date = Tkinter.StringVar()
self.To_date = Tkinter.StringVar()
self.wait_for_result = Tkinter.IntVar() ## we will use this variable to wait for user to select date range
Tkinter.Button(self, text="From date", command=self.getbegindate).grid(column=0, row=0)
Tkinter.Entry(self, textvariable=self.Begin_date).grid(column=1, row=0)
Tkinter.Entry(self, textvariable=self.To_date).grid(column=1, row=1)
Tkinter.Button(self, text="To date", command=self.gettodate).grid(column=0, row=1)
Tkinter.Button(self, text="SUBMIT", command=self.get_date).grid(column=0, columnspan=3)
def getbegindate(self):
cd = CalendarDialog(self)
self.result1 = cd.result1
self.Begin_date.set(self.result1.strftime("%m/%d/%Y"))
def gettodate(self):
cd = CalendarDialog(self)
self.result2 = cd.result2
self.To_date.set(self.result2.strftime("%m/%d/%Y"))
#self.Begin_date = Tkinter.StringVar()
#self.To_date = Tkinter.StringVar()
def get_date(self):
end = self.result2.strftime("%m/%d/%Y")
start = self.result1.strftime("%m/%d/%Y")
# I commented this lines below because they don't have any use
#end1 = self.result2.strptime(end, "%m/%d/%Y").date()
#start1 = self.result1.strptime(start, "%m/%d/%Y").date()
#delta = (end1 - start1).days
daterange = [pd.date_range(start, end)]
for single_date in daterange:
x = single_date.strftime("%m/%d/%Y")
self.rundate = x
self.wait_for_result.set(1) # now we have result so we can set variable wait_for_result to 1
print(self.rundate)
self.parent.destroy() # I added this line so tkinter window disappears once when user clicks SUBMIT button
#Tkinter.Button(self, text="From date", command=getbegindate).grid(column=0, row=0)
#Tkinter.Entry(self, textvariable=self.Begin_date).grid(column=1, row=0)
#Tkinter.Entry(self, textvariable=self.To_date).grid(column=1, row=1)
#Tkinter.Button(self, text="To date", command=gettodate).grid(column=0, row=1)
#Tkinter.Button(self, text="SUBMIT", command=get_date).grid(column=0, columnspan=3)
关于Python 日期范围查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49451501/
我有三张 table 。表 A 有选项名称(即颜色、尺寸)。表 B 有选项值名称(即蓝色、红色、黑色等)。表C通过将选项名称id和选项名称值id放在一起来建立关系。 我的查询需要显示值和选项的名称,而
在mysql中,如何计算一行中的非空单元格?我只想计算某些列之间的单元格,比如第 3-10 列之间的单元格。不是所有的列...同样,仅在该行中。 最佳答案 如果你想这样做,只能在 sql 中使用名称而
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 7 年前。 Improve this ques
我正在为版本7.6进行Elasticsearch查询 我的查询是这样的: { "query": { "bool": { "should": [ {
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 7 年前。 Improve this ques
是否可以编写一个查询来检查任一子查询(而不是一个子查询)是否正确? SELECT * FROM employees e WHERE NOT EXISTS (
我找到了很多关于我的问题的答案,但问题没有解决 我有表格,有数据,例如: Data 1 Data 2 Data 3
以下查询返回错误: 查询: SELECT Id, FirstName, LastName, OwnerId, PersonEmail FROM Account WHERE lower(PersonEm
以下查询返回错误: 查询: SELECT Id, FirstName, LastName, OwnerId, PersonEmail FROM Account WHERE lower(PersonEm
我从 EditText 中获取了 String 值。以及提交查询的按钮。 String sql=editQuery.getText().toString();// SELECT * FROM empl
我有一个或多或少有效的查询(关于结果),但处理大约需要 45 秒。这对于在 GUI 中呈现数据来说肯定太长了。 所以我的需求是找到一个更快/更高效的查询(几毫秒左右会很好)我的数据表大约有 3000
这是我第一次使用 Stack Overflow,所以我希望我以正确的方式提出这个问题。 我有 2 个 SQL 查询,我正在尝试比较和识别缺失值,尽管我无法将 NULL 字段添加到第二个查询中以识别缺失
什么是动态 SQL 查询?何时需要使用动态 SQL 查询?我使用的是 SQL Server 2005。 最佳答案 这里有几篇文章: Introduction to Dynamic SQL Dynami
include "mysql.php"; $query= "SELECT ID,name,displayname,established,summary,searchlink,im
我有一个查询要“转换”为 mysql。这是查询: select top 5 * from (select id, firstName, lastName, sum(fileSize) as To
通过我的研究,我发现至少从 EF 4.1 开始,EF 查询上的 .ToString() 方法将返回要运行的 SQL。事实上,这对我来说非常有用,使用 Entity Framework 5 和 6。 但
我在构造查询来执行以下操作时遇到问题: 按activity_type_id过滤联系人,仅显示最近事件具有所需activity_type_id或为NULL(无事件)的联系人 表格结构如下: 一个联系人可
如何让我输入数据库的信息在输入数据 5 分钟后自行更新? 假设我有一张 table : +--+--+-----+ |id|ip|count| +--+--+-----+ |
我正在尝试搜索正好是 4 位数字的 ID,我知道我需要使用 LENGTH() 字符串函数,但找不到如何使用它的示例。我正在尝试以下(和其他变体)但它们不起作用。 SELECT max(car_id)
我有一个在 mysql 上运行良好的 sql 查询(查询 + 连接): select sum(pa.price) from user u , purchase pu , pack pa where (
我是一名优秀的程序员,十分优秀!