免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1870 | 回复: 5
打印 上一主题 下一主题

硬盘整数分区计算器,第一次写出的图形界面程序,求各位给提提意见 [复制链接]

论坛徽章:
4
金牛座
日期:2013-10-11 16:12:50卯兔
日期:2014-07-31 09:17:19辰龙
日期:2014-08-08 09:28:02狮子座
日期:2014-09-14 20:32:05
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-01-07 23:31 |只看该作者 |倒序浏览
本帖最后由 ssfjhh 于 2013-01-08 11:16 编辑

第一次写出图形界面的程序,没学图形编程的时候以为很简单,几行代码就能搞定的事,没想到代码却这么长,也不知道是不是因为自己水平太次,贴出来求路过的给提点意见。还没有编译出独立运行的exe文件,明天继续折腾。

另外,在entry框中现实提示文本不知道怎么实现
例如,网页上的用户名输入框中,显示灰色的“请在此输入用户名”,点击entry框的时候,这些个字符却消失,等待用户输入。

#程序中并没有使用到re模块,但是如果不导入re模块,.py文件能够正常执行,但是编译却会出错,求解。
#我在网上下载的别人写的硬盘整数分区计算器只有一个20k的文件,为什么我用python编译出的diskinter.exe却有1.67M,整个文件夹体积有13.5M,
#这差别也太大了,怎么才能编译才能只有一个exe文件?并且把体积给削减一些?
#看了下cxfreeze -h帮助,找到办法了,只需要在编译的时候加一个 --no-copy-deps参数,编译出来的就是单独的一个exe文件,体积只有1.6M,
#但是依然比20K大很多。
  1. from tkinter import Tk, Entry, StringVar, Radiobutton
  2. from tkinter.ttk import Frame, Label
  3. import re

  4. class diskinter(Frame):
  5.    
  6.     def __init__(self, parent):
  7.         Frame.__init__(self, parent)
  8.         
  9.         self.parent = parent

  10.         self.format = StringVar()
  11.         self.inputGB = StringVar()
  12.         self.outputMB = StringVar()

  13.         self.initUI()

  14.     def initUI(self):

  15.         self.parent.title('硬盘整数分区计算器')

  16.         self.parent.resizable(False, False)
  17.         self.parent.iconbitmap(r'D:\desktop\diskinter\disk.ico')
  18.         self.pack()
  19.         self.parent.geometry('260x80+300+300')
  20.         self.columnconfigure(1, weight = 1)
  21.         self.columnconfigure(2)

  22.         lbl1 = Label(self, text = '磁盘格式:')
  23.         lbl1.grid(pady = 4)
  24.         lbl2 = Label(self, text = '分区大小:')
  25.         lbl2.grid(row = 1, pady = 4)
  26.         lbl3 = Label(self, text = '输入大小:')
  27.         lbl3.grid(row = 2, pady = 4)

  28.         #self.outputMB.set(0)
  29.         self.inentry = Entry(self, textvariable = self.inputGB)
  30.         self.inentry.grid(row = 1, column = 1, columnspan = 2)
  31.         self.outentry = Entry(self, state = 'readonly', textvariable = self.outputMB)
  32.         self.outentry.grid(row = 2, column = 1, columnspan = 2)

  33.         self.inentry.bind('<KeyRelease>', self.keypress)

  34.         lbl4 = Label(self, text = 'GB')
  35.         lbl4.grid(pady = 4, row = 1, column = 3)
  36.         lbl5 = Label(self, text = 'MB')
  37.         lbl5.grid(pady = 4, row = 2, column = 3)

  38.         self.format.set('NTFS')
  39.         ntfsrb = Radiobutton(self,
  40.                     variable = self.format,
  41.                     text = 'NTFS',
  42.                     value = 'NTFS',
  43.                     command = self.caculator)
  44.         fat32rb = Radiobutton(self,
  45.                     variable = self.format,
  46.                     text = 'FAT32',
  47.                     value = 'FAT32',
  48.                     command = self.caculator)
  49.         ntfsrb.grid(row = 0, column = 1)
  50.         fat32rb.grid(row = 0, column = 2)


  51.     def caculator(self):
  52.         try:
  53.             gbnum = int(self.inputGB.get())
  54.         except:
  55.             gbnum = 0
  56.         if self.format.get() == 'NTFS':
  57.             mbnum = int(int(gbnum*1024/7.84423828125+1)*7.84423828125+1)
  58.         if self.format.get() == 'FAT32':
  59.              mbnum = int(gbnum*1028-4)
  60.         mbnum = 0 if gbnum <= 0 else mbnum
  61.         self.outputMB.set(mbnum)
  62.         return mbnum

  63.     def keypress(self, event = None):
  64.         textin = str(self.inentry.get())
  65.         textin = ''.join(i for i in textin if i in '0123456789')
  66.         try:
  67.             self.inputGB.set(int(textin))
  68.         except:
  69.             pass
  70.         return self.caculator()

  71. def main():
  72.     root = Tk()
  73.     app = diskinter(root)
  74.     root.mainloop()

  75. if __name__ == '__main__':
  76.     main()
复制代码

论坛徽章:
0
2 [报告]
发表于 2013-01-08 13:15 |只看该作者
--no-copy-deps
看起来是不拷贝依赖的dll等,这样你在别的机器上还是运行不了的
PS 虽然Python很不错,但在Windows下做GUI程序,Python不会是首选

论坛徽章:
4
金牛座
日期:2013-10-11 16:12:50卯兔
日期:2014-07-31 09:17:19辰龙
日期:2014-08-08 09:28:02狮子座
日期:2014-09-14 20:32:05
3 [报告]
发表于 2013-01-08 13:38 |只看该作者
回复 2# chyanog


这也太恐怖了,别人的程序总共才20K,我这个却要十几M,那用什么写gui程序比较好呢?

论坛徽章:
0
4 [报告]
发表于 2013-01-08 14:42 |只看该作者
回复 3# ssfjhh


    Delphi就不错,如果精力充足的话VC++,Python写的GUI哪怕一个空窗体打包后不上M是几乎不可能的

论坛徽章:
4
金牛座
日期:2013-10-11 16:12:50卯兔
日期:2014-07-31 09:17:19辰龙
日期:2014-08-08 09:28:02狮子座
日期:2014-09-14 20:32:05
5 [报告]
发表于 2013-01-08 15:29 |只看该作者
回复 4# chyanog


    当初决定学习py是因为py的代码看起来比较漂亮,Delphi代码中的end让我看着很不爽。

论坛徽章:
0
6 [报告]
发表于 2013-01-08 17:17 |只看该作者
本帖最后由 chyanog 于 2013-01-08 17:17 编辑

回复 5# ssfjhh


    可惜Python的优势不在这,两全不能其美啊,其实Delphi可以通过com调用python.dll的,不过我也没有深入研究过
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP