我是pythongui新手,以前从未使用过pythongui。我决定试试看。
这是我的函数,它将本地日期时间转换为epoch,eg.py
是这两个函数所在的文件名
def epochConverter(a):
return datetime(*a).timestamp()
此函数接受datetime的两个参数并以timestamp(毫秒)为单位返回
^{pr2}$这和预期的一样
print(DateExtraction((2018,6,8,0,0,0), (2018,6,8,1,0,0)))
现在,我想在pythongui中实现这一点,我使用的是appjar库。这个简单的GUI代码如下所示
from appJar import gui
from eg import DateExtraction
class MyApplication():
# Build the GUI
def Prepare(self, app):
# Form GUI
app.setTitle("Simple Application")
app.setFont(16)
app.setStopFunction(self.BeforeExit)
app.addLabel('oneTime',"From Time:", 0, 0)
app.addEntry("fromTime", 0, 1)
app.addLabel('twoTime',"To Time:", 1, 0)
app.addEntry("toTime", 1, 1)
app.addButtons(["Submit"], self.Submit, colspan=2)
return app
def Start(self):
# Creates a UI
app = gui()
app = self.Prepare(app)
self.app = app
app.go()
def BeforeExit(self):
return self.app.yesNoBox("Confirm Exit", "Are you sure you want to exit?")
def Submit(self, btnName):
if btnName == "Submit":
timefrom = self.app.getEntry("fromTime")
timeto = self.app.getEntry("toTime")
DateExtraction(timefrom, timeto)
if __name__ == '__main__':
App = MyApplication()
App.Start()
当GUI运行时,我按原样填充两个文本字段
2018,6,8,0,0,0
2018,6,8,1,0,0
然后抛出错误
TypeError: function takes at most 9 arguments (14 given)
我也试过了,以防万一
(2018,6,8,0,0,0)
(2018,6,8,1,0,0)
又犯了同样的错误
type error, functions takes bla bla arguments (bla bla given)
我是pythongui新手,欢迎提出任何建议。另外,任何关于tkinter实现上述功能的建议也会很有帮助。在
我对appJar一无所知,但是文本输入字段的内容几乎可以肯定是字符串,而不是一组数字。因此,不是调用
epochConverter((2018,6,8,0,0,0))
,而是调用epochConverter("(2018,6,8,0,0,0)")
,这显然行不通。在具体的问题是
*a
。对于一个6个数字的元组,它变成了6个参数;对于一个14个字符的字符串,它变成了14个参数。在无论如何,您需要编写一些代码来获取输入字符串,并将其解析为正确的格式。在
一种方法是使用^{} ,它接受作为Python源代码文本的任何字符串并将其转换为等效值:
当然,您可能需要添加一些错误处理:
^{pr2}$而且,即使
literal_eval
成功,也只意味着你有一些有效的Python有效,而不一定是6个整数的元组,它也会成功,比如说,一组两个字符串和一个复数。在一种更简洁的方法是为您的特定格式编写一个解析器。这听起来有点吓人,但是你的格式非常简单:你必须有6个整数,中间用逗号,对吧?所以:
^{3}$所以现在:
同样,你需要一些错误处理。在本例中,一个无效的字符串将给您一个
ValueError
,而不是SyntaxError
,但在其他情况下,它是相同的。在当然,即使现在我们可以确定我们有一个包含六个数字的列表,但是从日期解析中仍然可以得到一个错误——例如,用户可能要求
2018,40,5,0,0,0
。在您可能还想考虑将转换逻辑移到}而不是GUI中。\在
epochConverter
或{例如,假设您希望在命令行工具中使用相同的“引擎”代码。这个命令行工具将从
sys.argv
,或input()
或类似的地方获取参数,所以它最终也会得到一个字符串,与GUI条目的格式相同,对吧?所以您可能希望它共享相同的字符串到元组转换逻辑。在相关问题 更多 >
编程相关推荐